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中用datetime包进行对时间的一些操作
Jun 23 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
Python探索之pLSA实现代码
Oct 25 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
Django 开发环境配置过程详解
Jul 18 Python
Python求凸包及多边形面积教程
Apr 12 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
python构造IP报文实例
May 05 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
python基础之函数的定义和调用
Oct 24 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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模板页面中分页代码的解析
2009/02/06 PHP
php表单提交问题的解决方法
2011/04/12 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python中PIL安装简单教程
2016/04/21 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Django实现网页分页功能
2019/10/31 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
python绘制汉诺塔
2021/03/01 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
女大学生个人求职信
2013/12/09 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
校运会口号
2014/06/18 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python