簡體   English   中英

Raspberry Pi無法接收多播數據包

[英]Raspberry Pi does not receive multicast packets

一般而言,我對python編程和linux / raspian還是相當陌生,在過去的幾周中,我遇到了一個絕對的問題。 我一直在堅持不懈,但是經過最后一晚到凌晨1點之后,試圖使它正常工作,我認為是時候尋求幫助了。

因此,我有一個樹莓派,它已設置為從貓頭鷹直覺(電和光伏監視器)接收數據,該直覺通過224.192.32.19和端口22600上的多播發送數據。

我正在使用iptables和fail2ban,但我設置了一條規則以允許所有多播流量,並且源IP地址不在fail2ban列表中。

iptables規則如下:

目標選擇退出源目的地
接受全部-任何地方任何地方PKTTYPE =多播

我正在使用一些非常基本的python腳本來嘗試接收數據報,但無濟於事。

我已經嘗試過使用相同的腳本來嘗試從239.255.255.250:1900接收數據報,並且工作正常。

我還在Windows機器上嘗試過“ mcsend 224.192.32.19 22600”,該機器可以使用“ rtpqual 224.192.32.19 22600”接收數據,但是raspi仍然不能。

奇怪的是,當我運行“ netstat -g”時,即使當前沒有運行任何偵聽器,我也會得到以下內容...

編輯:原來我離開了工作在控制台窗口中運行的腳本。 盡管如此,它什么也沒收到。

IPv6 / IPv4組成員資格
接口引用組


lo 1 all-systems.mcast.net
eth0 1 224.192.32.19
eth0 1 all-systems.mcast.net

另外,如果我運行“ ifconfig eth0”,則會得到:

eth0鏈接encap:以太網HWaddr b8:27:eb:4c:46:71
inet地址:192.168.0.20廣播:192.168.0.255掩碼:255.255.255.0
UP廣播多播MTU:1500公制:1
RX數據包:27645錯誤:0掉落:0超限:0幀:0
TX數據包:11846錯誤:0掉落:0超限:0運營商:0
碰撞:0 txqueuelen:1000
接收字節:1701082(1.6 MiB)發送字節:2027974(1.9 MiB)

所以我認為我可以放心地假設在pi上支持/啟用了多播。

py腳本如下(默認IP地址/端口不起作用,“幫助”中的IP地址/端口起作用):

from socket import socket, inet_aton, IPPROTO_IP, IP_ADD_MEMBERSHIP
from socket import AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_REUSEADDR, INADDR_ANY
from optparse import OptionParser
import struct

parser = OptionParser()
parser.add_option("-g", "--group", dest="group", default="224.192.32.19", help="IP Multicast Group (default: 239.255.255.250)")
parser.add_option("-p", "--port", dest="port", default=22600, help="IP Multicast UDP port number (default: 1900)")
parser.add_option("-b", "--buffer", dest="buffer", default=1500, help="IP Socket buffer size (default: 1500 bytes)")
options, args = parser.parse_args()

MCAST_GRP   = options.group
MCAST_PORT  = options.port
BUFFER_SIZE = options.buffer

sock = socket(AF_INET, SOCK_DGRAM)
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
mreq = struct.pack('=4sl', inet_aton(MCAST_GRP), INADDR_ANY) # pack MCAST_GRP correctly
sock.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)         # Request MCAST_GRP

sock.bind((MCAST_GRP, MCAST_PORT))                           # Bind to all intfs

while True:
    data, srv_sock = sock.recvfrom(BUFFER_SIZE)              # Receive data (blocking)
    srv_addr, srv_srcport = srv_sock[0], srv_sock[1]
    print "%s sent: %s" % (srv_addr, data)

我無法確定問題是否與

  • raspi以及可能的iptables規則
  • 網絡(路由器可能不支持在這些IP地址/端口上進行多播 - 聯網計算機未接收到多播
  • pi上的其他內容訂閱了IP地址,因此阻止了我的py腳本

感謝您對此提供的任何幫助,它的確發揮了我的作用。

羅素

好極了! 看來問題出在我的空中路由器上!

http://helpforum.sky.com/t5/Broadband-Setup-Connection-WiFi/Sky-Hub-Is-it-really-bad/mp/1845916#M48979

看來,OP的問題的答案是肯定的。 是的,那很糟糕。

:(

不知道從這里去哪里...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM