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 判断一个进程是否存在
Apr 09 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
pyQt5实时刷新界面的示例
Jun 25 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
基于python生成英文版词云图代码实例
May 16 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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 setTime 设置当前时间的代码
2012/08/27 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
js返回顶部实例分享
2016/12/21 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
Python日期操作学习笔记
2008/10/07 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
仓管员岗位职责范文
2013/11/08 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
大学总结自我鉴定
2014/01/18 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python