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 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
python中requests库session对象的妙用详解
Oct 30 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
用python3教你任意Html主内容提取功能
Nov 05 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
python实现信号时域统计特征提取代码
Feb 26 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Pyqt助手安装PyQt5帮助文档过程图解
Nov 20 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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中使用Oracle数据库(3)
2006/10/09 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
ORACLE第二个十问
2013/12/14 面试题
护理专业推荐信
2013/11/07 职场文书
教师节促销活动方案
2014/02/14 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
教师师德考核自我评价
2014/09/13 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
Jsonp劫持学习
2021/04/01 PHP
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库