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调用java模块SmartXLS和jpype修改excel文件的方法
Apr 28 Python
python 连接sqlite及简单操作
Jun 30 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
python中字符串内置函数的用法总结
Sep 13 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
python3 配置logging日志类的操作
Apr 08 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
Django与数据库交互的实现
Jun 03 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
php5.2.0内存管理改进
2007/01/22 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python编程实现蚁群算法详解
2017/11/13 Python
Django框架模板的使用方法示例
2019/05/25 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
学生党员思想汇报
2013/12/28 职场文书
感恩节红领巾广播稿
2014/02/11 职场文书
临床医学专业求职信
2014/08/08 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
通知函的格式
2015/04/27 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
个人售房合同协议书
2016/03/21 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python