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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python max内置函数详细介绍
Nov 17 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
Python生成随机密码的方法
Jun 16 Python
Python读取properties配置文件操作示例
Mar 29 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
python+rsync精确同步指定格式文件
Aug 29 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
Django url 路由匹配过程详解
Jan 22 Python
python在协程中增加任务实例操作
Feb 28 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使用数组实现队列
2012/02/05 PHP
php页面缓存方法小结
2015/01/10 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
JavaScript静态的动态
2006/09/18 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python2与Python3的区别点整理
2019/12/12 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python中字典增加和删除使用方法
2020/09/30 Python
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
YII2 全局异常处理深入讲解
2021/03/24 PHP
士力架广告词
2014/03/20 职场文书
黄金搭档广告词
2014/03/21 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
北京英文导游词
2015/02/12 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers