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编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python探索之修改Python搜索路径
Oct 25 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
用Python解决x的n次方问题
Feb 08 Python
最小二乘法及其python实现详解
Feb 24 Python
python实现拼接图片
Mar 23 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
python自动化之如何利用allure生成测试报告
May 02 Python
pytorch 一行代码查看网络参数总量的实现
May 12 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
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP文件上传主要代码讲解
2013/09/30 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
python 文件操作api(文件操作函数)
2016/08/28 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
python如何导入依赖包
2020/07/13 Python
信访工作者先进事迹
2014/01/17 职场文书
二年级评语大全
2014/04/23 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
大学生实习证明范本
2014/09/19 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS