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中文分词实现方法(安装pymmseg)
Jun 14 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
谈谈python中GUI的选择
Mar 01 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
Python帮你识破双11的套路
Nov 11 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
python函数指定默认值的实例讲解
Mar 29 Python
分享Python异步爬取知乎热榜
Apr 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
php字符串过滤与替换小结
2015/01/26 PHP
php按单词截取字符串的方法
2015/04/07 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
django使用LDAP验证的方法示例
2018/12/10 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
大学生毕业自荐信
2013/10/10 职场文书
企业诚信承诺书
2014/05/23 职场文书
投标承诺书怎么写
2014/05/24 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
检讨书怎么写?
2019/06/21 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript