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 相关文章推荐
python self,cls,decorator的理解
Jul 13 Python
python实现类的静态变量用法实例
May 08 Python
python实现字符串和日期相互转换的方法
May 13 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 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
PHP获取MAC地址的具体实例
2013/12/13 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
python实现简单遗传算法
2018/03/19 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Pytorch之保存读取模型实例
2019/12/30 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
员工培训邀请函
2014/02/02 职场文书
大班亲子运动会方案
2014/06/10 职场文书
班组拓展活动方案
2014/08/14 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
毕业生自荐信范文
2015/03/05 职场文书
员工表扬信怎么写
2015/05/05 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
spring cloud 配置中心native配置方式
2021/09/25 Java/Android