这篇文章主要为大家详细介绍了python检测IP地址变化并触发事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

IoT PoC项目中需要展示视频采集源进行wifi切换后(表明视频采集源端发生了移动),接收端观看到的视频的流畅度,以及当接收端进行移动时,检测视频的流畅度,故需要一个模块周期性地探测本地IP是否变化,以指示设备的移动性。

操作:当设备做为视频接受者发生移动时,在IP变化后立刻向视频发送者发送携带有新IP的内容请求消息

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import subprocess
from time import sleep 
import logging.config
from socket import *
import binascii
import json
import re

def search(pattern,text,flag): 
 #print(text)
 m=re.search(pattern,text)
 if m is not None:
  return m.group(flag)

def get_ip(cmd):
 ip_cur = '0.0.0.0'
 while ip_cur == '0.0.0.0':
  obj = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
  obj.wait()
  lines = obj.stdout.readlines()      
  for eachline in lines:
   eachline= eachline.decode('gbk')
   #print(eachline)
   strs='IPv4 地址'
   if strs in eachline:    
    content=search('IPv4 地址 . . . . . . . . . . . . :(.*?)\r\n',eachline,1)
    #print(content)
    ip_cur = str(content)
    print(ip_cur)
    break  
 return ip_cur

def send_data_request(S_EUID,D_EUID,C_EUID,NA,port):
 address = (NA, port)
 s = socket(AF_INET,SOCK_DGRAM) 
 flag=1
 while flag:  
  s_EUID=binascii.a2b_hex(S_EUID)  
  d_EUID=binascii.a2b_hex(D_EUID)
  sev_type=binascii.a2b_hex(hex(22).replace('0x',''))
  Head_len=binascii.a2b_hex(hex(36).replace('0x',''))
  ICN_check=binascii.a2b_hex(hex(4444).replace('0x',''))
  packet_type=binascii.a2b_hex('0'+hex(1).replace('0x',''))  
  c_EUID=binascii.a2b_hex(C_EUID)   
  data=s_EUID+d_EUID+ sev_type+Head_len\
  +ICN_check+packet_type+c_EUID
  print(len(data))
  if not data: 
   break 
  s.sendto(data,address)
  flag=0 
 s.close()


def ip_cmp(cmd,S_EUID,D_EUID,C_EUID,NA,port,IP_cur,get_cnt): 
 ip_next=get_ip(cmd)
 get_cnt=get_cnt+1
 if time_flag:
  if ip_cur!='0.0.0.0' and ip_next !='0.0.0.0':
   if ip_cur == ip_next:
    change_flag=0
    print('change_flag='+str(change_flag))
   else:
    change_flag=1
    print('change_flag='+str(change_flag))    
    send_data_request(S_EUID,D_EUID,C_EUID,NA,port)
 return ip_next



if __name__ == '__main__':

 cmd='ipconfig'

 get_cnt=0 #ip 获取次数计数器
 T_interval=0.1 #ip 获取周期
 ip_cur='0.0.0.0' 
 ip_next='0.0.0.0'
 ip_cur=get_ip(cmd)
 #ip_cur='192.168.110.1'
 get_cnt=get_cnt+1

 time_flag=1

 S_EUID='aaaa'
 D_EUID='bbbb'
 C_EUID='cccc'
 NA='192.168.1.100' 
 port=35000

 while time_flag:
  ip_next=ip_cmp(cmd,S_EUID,D_EUID,C_EUID,NA,port,ip_cur,get_cnt)
  print('IP_next='+ip_next)
  sleep(T_interval)
  ip_cur=ip_next
  print('IP_cur='+ip_next)

本代码中,利用ipconfig指令获取IP地址,该方法可能存在一定的问题,故还可采用其他的方法获取IP,如用socket方法可以获取本地的外网IP,这里不赘述,可再百度相关的方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

    无相关信息
最新资讯
寿命之谜:神经兴奋性高,个体寿命短?

寿命之谜:神经兴奋性高

神经系统发出的信号可以有效地调控寿命。现在看来,总神
疫情下的生鲜电商:半夜抢菜、订单增5倍、不计成本

疫情下的生鲜电商:半夜

对于生鲜平台来说,如何稳定供应链,并满足用户的即时需求
蔚来用户信托宣布设立抗击新型肺炎500万专项基金

蔚来用户信托宣布设立

面对新型肺炎疫情,蔚来用户信托宣布设立抗击新型肺炎50
北大团队:咳嗽药水"沐舒坦"具治疗新冠病毒潜力

北大团队:咳嗽药水"

氨溴索,以“沐舒坦”为人们所熟知,是一种呼吸道润滑祛痰
英特尔向国际红十字会捐赠100万美元 用于疫情防控

英特尔向国际红十字会

英特尔宣布向国际红十字会捐赠100万美元,用于支持中国
钟南山:疫情1周或10天左右达到高峰 不会大规模增加

钟南山:疫情1周或10天

1月28日,国家卫健委高级别专家组组长、中国工程院院士
最新文章
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件

使用PyInstaller将Pyg

这篇文章主要介绍了使用PyInstaller将Pygame库编写的
Python数学形态学实例分析

Python数学形态学实例

这篇文章主要介绍了Python数学形态学,结合实例形式分
Python scipy的二维图像卷积运算与图像模糊处理操作示例

Python scipy的二维图

这篇文章主要介绍了Python scipy的二维图像卷积运算与
python自动发微信监控报警

python自动发微信监控

这篇文章主要为大家详细介绍了python自动发微信监控报
修改 CentOS 6.x 上默认Python的方法

修改 CentOS 6.x 上默

这篇文章主要介绍了修改 CentOS 6.x 上默认Python的方
Python使用Slider组件实现调整曲线参数功能示例

Python使用Slider组件

这篇文章主要介绍了Python使用Slider组件实现调整曲线