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中Librosa的mfcc步骤详解
Jan 09 Python
python3+selenium自动化测试框架详解
Mar 17 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
Python3安装pip工具的详细步骤
Oct 14 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
python实现图片素描效果
Sep 26 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
基于Python实现粒子滤波效果
Dec 01 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
May 13 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
咖啡的传说和历史
2021/03/03 新手入门
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
JavaScript内核之基本概念
2011/10/21 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python生成随机MAC地址
2015/03/10 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
简述Python中的进程、线程、协程
2016/03/18 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python关于变量名的基础知识点
2020/03/03 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
就职演讲稿范文
2014/05/19 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
优秀班主任申报材料
2014/12/16 职场文书
大学生党性分析材料
2014/12/19 职场文书
行政处罚告知书
2015/07/01 职场文书
2016年元旦主持词
2015/07/06 职场文书
社区服务理念口号
2015/12/25 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电