欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3通過(guò)udp實(shí)現(xiàn)組播數(shù)據(jù)的發(fā)送和接收操作

 更新時(shí)間:2020年05月05日 20:14:33   作者:牛帥兵  
這篇文章主要介紹了python3通過(guò)udp實(shí)現(xiàn)組播數(shù)據(jù)的發(fā)送和接收操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

本文主要通過(guò)對(duì)海康攝像頭進(jìn)行抓包,模擬發(fā)送了udp包,并抓取攝像頭返回的數(shù)據(jù)包,解析并提取相關(guān)信息。

通過(guò)抓包發(fā)現(xiàn),??禂z像頭發(fā)送、接收數(shù)據(jù)使用udp協(xié)議,后來(lái)比較發(fā)現(xiàn),使用python模擬起來(lái)比較簡(jiǎn)單。由于攝像頭內(nèi)置了udp協(xié)議的server端程序,本文主要使用python模擬客戶端發(fā)送udp數(shù)據(jù)包。

客戶端代碼

import socket
import re

ANY = "0.0.0.0"
DES_IP = "239.255.255.250"
PORT = 37020
# xml_str = b'<?xml version="1.0" encoding="utf-8"?><Probe><Uuid>B2D5D4D2-808C-40F6-87CD-694C05C2B274</Uuid><Types>inquiry</Types></Probe> '
xml_str = b'<?xml version="1.0" encoding="utf-8"?><Probe><Uuid>CB09F608-E016-4EE8-869A-CA186852F12E</Uuid><Types>inquiry</Types></Probe> '

# 創(chuàng)建UDP socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
# 允許端口復(fù)用
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 綁定監(jiān)聽(tīng)多播數(shù)據(jù)包的端口
s.bind((ANY, PORT))
# 聲明該socket為多播類型
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255)
# 加入多播組,組地址由第三個(gè)參數(shù)制定
s.setsockopt(
  socket.IPPROTO_IP,
  socket.IP_ADD_MEMBERSHIP,
  socket.inet_aton(DES_IP) + socket.inet_aton(ANY)
)
s.setblocking(False)
s.sendto(xml_str, (DES_IP, PORT))
while True:
  try:
    data, address = s.recvfrom(2048)
  except Exception as e:
    # print(e)
    pass
  else:
    print(address)
    # print(data)
    try:
      IPv4 = re.search(re.compile(r"<IPv4Address>(.*?)</IPv4Address>", re.S), str(data))[1]
      MAC = re.search(re.compile(r"<MAC>(.*?)</MAC>", re.S), str(data))[1]
    except TypeError:
      pass
    else:
      # print(data)
      print("IPv4: {}".format(IPv4))
      print("MAC: {}".format(MAC))

代碼主要使用了socket發(fā)送數(shù)據(jù),使用re模塊來(lái)處理和提取數(shù)據(jù)。

通過(guò)使用wireshark抓包發(fā)現(xiàn),首先需要客戶端發(fā)送一個(gè)xml類型的數(shù)據(jù),server端接收到數(shù)據(jù)后,會(huì)返回?cái)z像頭的各種信息,包括本文中將要獲取的攝像頭IPv4和MAC地址。

程序運(yùn)行結(jié)果如圖所示:

寫(xiě)在后面

本程序不僅可以作為設(shè)備發(fā)現(xiàn)來(lái)使用,在更換設(shè)備時(shí)也能第一時(shí)間發(fā)現(xiàn)設(shè)備是否被更換。

補(bǔ)充知識(shí):python3 udp可以發(fā)送但不能接收消息的解決方法

現(xiàn)在有兩個(gè)系統(tǒng),win10和虛擬機(jī)中的xp,win10中有python3,xp中有網(wǎng)絡(luò)調(diào)試助手。

python3通過(guò)udp方式發(fā)送的消息可以在網(wǎng)絡(luò)調(diào)試助手接收,但是在網(wǎng)絡(luò)調(diào)試助手上發(fā)送的消息在python3上卻接收不到。首先python3接收寫(xiě)的代碼如下:

import socket

def receive_message():
  udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #創(chuàng)建一個(gè)套接字
  udp_socket.bind(('', 63630)) #綁定本地信息,自己電腦的ip和程序的端口。ip一般不用寫(xiě),表示本機(jī)的任意一個(gè)ip,端口大于常用的1023就可以
  while True:
    udp_data = udp_socket.recvfrom(1024) #接收數(shù)據(jù),1024表示本次接收的最大字節(jié)數(shù)
    if udp_data[0].decode(encoding='gbk') != 'end':
      print('{}:{}'.format(str(udp_data[1]), udp_data[0].decode(encoding='gbk')))
    else:
      break
  udp_socket.close() #關(guān)閉套接字

if __name__ == '__main__':
  receive_message()

本以為是程序的問(wèn)題或者是網(wǎng)絡(luò)調(diào)試助手的問(wèn)題,但是檢查多遍后再次嘗試仍然無(wú)法接收。。暫時(shí)放下。。

今天把win10防火墻關(guān)閉后發(fā)現(xiàn)是可以正常接收的,但是想在不關(guān)閉防火墻的情況下仍然能夠接收,百度也沒(méi)有找到想要的答案。。

正當(dāng)要放棄的時(shí)候看到如下設(shè)置:

于是勾選上了紅色箭頭所指的復(fù)選框。

再次運(yùn)行程序,win10彈出對(duì)話框如下:

點(diǎn)擊允許訪問(wèn)后,在xp網(wǎng)絡(luò)調(diào)試助手上發(fā)送消息就可以在python3上正常接收了!!!

以上這篇python3通過(guò)udp實(shí)現(xiàn)組播數(shù)據(jù)的發(fā)送和接收操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解python的ORM中Pony用法

    詳解python的ORM中Pony用法

    本篇文章給大家詳細(xì)介紹了python的ORM中Pony用法以及詳細(xì)代碼分享,對(duì)此有需要的朋友測(cè)試參考下。
    2018-02-02
  • python包裝和授權(quán)學(xué)習(xí)教程

    python包裝和授權(quán)學(xué)習(xí)教程

    包裝是指對(duì)一個(gè)已經(jīng)存在的對(duì)象進(jìn)行系定義加工,實(shí)現(xiàn)授權(quán)是包裝的一個(gè)特性,下面這篇文章主要給大家介紹了關(guān)于python包裝和授權(quán)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • jupyter notebook 恢復(fù)誤刪單元格或者歷史代碼的實(shí)現(xiàn)

    jupyter notebook 恢復(fù)誤刪單元格或者歷史代碼的實(shí)現(xiàn)

    這篇文章主要介紹了jupyter notebook 恢復(fù)誤刪單元格或者歷史代碼的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • pytorch Dataset,DataLoader產(chǎn)生自定義的訓(xùn)練數(shù)據(jù)案例

    pytorch Dataset,DataLoader產(chǎn)生自定義的訓(xùn)練數(shù)據(jù)案例

    這篇文章主要介紹了pytorch Dataset, DataLoader產(chǎn)生自定義的訓(xùn)練數(shù)據(jù)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • django序列化時(shí)使用外鍵的真實(shí)值操作

    django序列化時(shí)使用外鍵的真實(shí)值操作

    這篇文章主要介紹了django序列化時(shí)使用外鍵的真實(shí)值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 4行Python代碼生成圖像驗(yàn)證碼(2種)

    4行Python代碼生成圖像驗(yàn)證碼(2種)

    這篇文章主要介紹了4行Python代碼生成圖像驗(yàn)證碼(2種),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python函數(shù)的參數(shù)常見(jiàn)分類與用法實(shí)例詳解

    Python函數(shù)的參數(shù)常見(jiàn)分類與用法實(shí)例詳解

    這篇文章主要介紹了Python函數(shù)的參數(shù)常見(jiàn)分類與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python函數(shù)的形參、實(shí)參、默認(rèn)參數(shù)、可變參數(shù)等概念、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • pyspark 隨機(jī)森林的實(shí)現(xiàn)

    pyspark 隨機(jī)森林的實(shí)現(xiàn)

    這篇文章主要介紹了pyspark 隨機(jī)森林的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 使用Python計(jì)算偏導(dǎo)數(shù)

    使用Python計(jì)算偏導(dǎo)數(shù)

    偏導(dǎo)數(shù)在數(shù)學(xué)、物理、工程等領(lǐng)域中都有廣泛的應(yīng)用,特別是在描述多變量系統(tǒng)的變化率、梯度、最小值和最大值等方面,下面我們就來(lái)看看如何利用Python計(jì)算偏導(dǎo)數(shù)吧
    2024-01-01
  • 十條建議幫你提高Python編程效率

    十條建議幫你提高Python編程效率

    這篇文章主要為大家介紹了十條建議,可以幫你提高Python編程效率的10條,想要提升提高Python編程效率的朋友不要錯(cuò)過(guò)
    2016-02-02

最新評(píng)論