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交换变量
Sep 06 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
python日志记录模块实例及改进
Feb 12 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
自学python用什么系统好
Jun 23 Python
Python分类测试代码实例汇总
Jul 23 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
给numpy.array增加维度的超简单方法
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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php实现源代码加密的方法
2015/07/11 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
python更新列表的方法
2015/07/28 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python中django学习心得
2017/12/06 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python如何实现数据的线性拟合
2019/07/19 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
python 项目目录结构设置
2020/02/14 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
python线性插值解析
2020/07/05 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
初中体育课教学反思
2016/02/16 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js