5

いくつかのマルチキャストの問題をデバッグしたいと思います。着信マルチキャスト パケットを表示するための小さなプログラム/ユーティリティがいくつかあることを願っています。

送信マシン (A) から、Richard Stevens のsockプログラム (TCP/IP Illustrated book Vol1 に付属) を使用して、次のようにマルチキャスト パケット (ソース ポート = 宛先ポート = 7000) を送信します。

sock -u -b 7000 224.0.0.7 7000

受信マシン (B) では、Wireshark を使用して送信されたパケットをキャプチャできますが、sockB で実行されている同じコマンドは何も受信していないと報告されます。

次に、過剰なWiresharkを除いて、着信マルチキャストパケットを表示するためにBでどのプログラムを使用する必要がありますか。

Linux と Windows のプログラムはどちらも大歓迎です。

ここに画像の説明を入力

4

5 に答える 5

12

これは、受信データを出力するPythonスクリプトです。

# Multicast client
# Adapted from: http://chaos.weblogs.us/archives/164

import socket

ANY = "0.0.0.0" 
MCAST_ADDR = "224.0.0.7"
MCAST_PORT = 7000

# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)

# Allow multiple sockets to use the same PORT number
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

# Bind to the port that we know will receive multicast data
sock.bind((ANY,MCAST_PORT))

# Tell the kernel that we want to add ourselves to a multicast group
# The address for the multicast group is the third param
status = sock.setsockopt(socket.IPPROTO_IP,
socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MCAST_ADDR) + socket.inet_aton(ANY))

# setblocking(0) is equiv to settimeout(0.0) which means we poll the socket.
# But this will raise an error if recv() or send() can't immediately find or send data. 
sock.setblocking(0)

while 1:
    try:
        data, addr = sock.recvfrom(1024)
    except socket.error as e:
        pass
    else:
        print "From: ", addr
        print "Data: ", data
于 2013-03-08T12:16:40.380 に答える
3

これを行うには、netcat (nc) を使用できます。

netcat -vv -l -p 1234 -u

これは、netcat がローカルホストのポート 1234 で UDP モードで詳細にリッスンしていることを意味します。

于 2015-01-27T15:17:43.317 に答える