python检测IP地址变化并触发事件

 更新时间:2018年12月26日 16:41:58   作者:lynnucas  
这篇文章主要为大家详细介绍了python检测IP地址变化并触发事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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基础之匿名函数介绍

    大家好,本篇文章主要讲的是python基础之匿名函数介绍,感兴趣的同学赶快来看一看,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • python中创建以及删除虚拟环境的几种方法总结

    python中创建以及删除虚拟环境的几种方法总结

    在Python 中创建虚拟环境非常容易,但是删除虚拟环境可能会有一些挑战,这篇文章主要给大家介绍了关于python中创建以及删除虚拟环境的几种方法,需要的朋友可以参考下
    2024-03-03
  • 详解Python OpenCV图像分割算法的实现

    详解Python OpenCV图像分割算法的实现

    图像分割是指根据灰度、色彩、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域。本文就来和大家聊聊OpenCV的图像分割算法及基于轮廓的字符分离,感兴趣的可以了解一下
    2022-08-08
  • Django之提交表单与前后端交互的方法

    Django之提交表单与前后端交互的方法

    今天小编就为大家分享一篇Django之提交表单与前后端交互的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python实现双轴组合图表柱状图和折线图的具体流程

    Python实现双轴组合图表柱状图和折线图的具体流程

    这篇文章主要介绍了Python双轴组合图表柱状图+折线图,Python绘制双轴组合的关键在plt库的twinx()函数,具体实例代码跟随小编一起看看吧
    2021-08-08
  • 亲手教你用Python打造一款摸鱼倒计时界面

    亲手教你用Python打造一款摸鱼倒计时界面

    前段时间在微博看到一段摸鱼人的倒计时模板,感觉很有意思,于是我用了一个小时的时间写一个页面出来,下面小编把实现过程分享给大家,对Python摸鱼倒计时界面感兴趣的朋友一起看看吧
    2021-12-12
  • python常见模块之OS模块和time模块

    python常见模块之OS模块和time模块

    这篇文章主要给大家介绍了关于python常见模块之OS模块和time模块的相关资料,time模块、os模块与sys模块被称为python模块中的三剑客,需要的朋友可以参考下
    2021-06-06
  • Python实现自动上传文件到百度网盘

    Python实现自动上传文件到百度网盘

    这篇文章主要为大家详细介绍了如何利用Python实现自动上传文件到百度网盘功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • python 绘制正态曲线的示例

    python 绘制正态曲线的示例

    这篇文章主要介绍了python 绘制正态曲线的示例,帮助大家更好的利用python绘制图像,感兴趣的朋友可以了解下
    2020-09-09
  • python实现读取excel表格详解方法

    python实现读取excel表格详解方法

    python操作excel主要用到xlrd和xlwt两个库,xlrd读取表格数据,支持xlsx和xls格式的excel表格;xlwt写入excel表格数据
    2022-07-07

最新评论