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的keyword模块用法实例分析
Jun 30 Python
Python常用库推荐
Dec 04 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
Python调用服务接口的实例
Jan 03 Python
Python socket 套接字实现通信详解
Aug 27 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
Python txt文件如何转换成字典
Nov 03 Python
python中append函数用法讲解
Dec 11 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
Python实现照片卡通化
Dec 06 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
.NET面试问题集
2015/12/08 面试题
大客户销售经理职责
2013/12/04 职场文书
大学生秋游活动方案
2014/02/17 职场文书
初中作文评语大全
2014/04/23 职场文书
教师评语大全
2014/04/28 职场文书
推荐信怎么写
2014/05/09 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python