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实现将一个正整数分解质因数的方法分析
Dec 14 Python
Numpy数组转置的两种实现方法
Apr 17 Python
Flask框架信号用法实例分析
Jul 24 Python
python实现简单的单变量线性回归方法
Nov 08 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python 读取数据库并绘图的实例
Dec 03 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
Django 删除upload_to文件的步骤
Mar 30 Python
Python中的With语句的使用及原理
Jul 29 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
python基础学习之生成器与文件系统知识总结
May 25 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产生随机字符串函数
2006/12/06 PHP
php中strtotime函数用法详解
2014/11/15 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
给学校的建议书
2014/03/12 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
公益广告标语
2014/06/19 职场文书
部门活动策划方案
2014/08/16 职场文书
技术负责人岗位职责
2015/02/10 职场文书
运动会广播稿200字
2015/08/19 职场文书
导游词之唐山景点
2019/12/18 职场文书
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
python_tkinter弹出对话框创建
2022/03/20 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript