python检测IP地址变化并触发事件


Posted in Python onDecember 26, 2018

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,这里不赘述,可再百度相关的方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
python 打印对象的所有属性值的方法
Sep 11 Python
python模块之paramiko实例代码
Jan 31 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
numpy中的meshgrid函数的使用
Jul 31 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
Python调用JavaScript代码的方法
Oct 27 Python
python实现自动获取IP并发送到邮箱
Dec 26 #Python
python 实现分页显示从es中获取的数据方法
Dec 26 #Python
python 获取页面表格数据存放到csv中的方法
Dec 26 #Python
python 产生token及token验证的方法
Dec 26 #Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 #Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 #Python
python处理multipart/form-data的请求方法
Dec 26 #Python
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
Python中的urllib模块使用详解
2015/07/07 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
优秀员工推荐材料
2014/12/20 职场文书
我的生日感言
2015/08/03 职场文书
教师旷工检讨书
2015/08/15 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis
Golang 实现WebSockets
2022/04/24 Golang