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通过scapy获取局域网所有主机mac地址示例
May 04 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
pandas对指定列进行填充的方法
Apr 11 Python
Python带动态参数功能的sqlite工具类
May 26 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python3解释器知识点总结
Feb 19 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
Python实现转换图片背景颜色代码
Apr 30 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
python selenium xpath定位操作
Sep 01 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 Python
Python编写冷笑话生成器
Apr 20 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
写的htc的数据表格
2007/01/20 Javascript
认识延迟时间为0的setTimeout
2008/05/16 Javascript
js函数调用的方式
2014/05/06 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
JavaScript实现简单轮播图效果
2018/12/01 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python http接口自动化脚本详解
2018/01/02 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
奥巴马英文演讲稿
2014/05/15 职场文书
民事赔偿协议书
2014/11/02 职场文书
老公婚前保证书
2015/02/28 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
干部外出学习心得体会
2016/01/18 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书