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为tornado添加recaptcha验证码功能
Feb 26 Python
python求pi的方法
Oct 08 Python
跟老齐学Python之编写类之四再论继承
Oct 11 Python
python简单读取大文件的方法
Jul 01 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
python一些性能分析的技巧
Aug 30 Python
Python 内置函数速查表一览
Jun 02 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
DWR Ext 加载数据
2009/03/22 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
Django如何配置mysql数据库
2018/05/04 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
生物制药专业自我鉴定
2014/02/19 职场文书
工程负责人任命书
2014/06/06 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
普通党员整改措施
2014/10/24 职场文书
高一军训决心书
2015/02/05 职场文书
刑事申诉状范文
2015/05/20 职场文书
现实表现证明材料
2015/06/19 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Redis特殊数据类型bitmap位图
2022/06/01 Redis