26

I have two servers on the same subnet. I have an application installed which uses multicast UDP to propagate events between the two servers and keep them in sync.

This does not seem to be happening, so I want to make sure that the multicast UDP messages are getting through as my first step.

The servers are running Windows 2008 R2.

How can I test Multicast UDP connectivity between two servers?

pauska
  • 19,532
  • 4
  • 55
  • 75
Greg B
  • 1,548
  • 5
  • 17
  • 32

7 Answers7

20

Try iperf

An article that explains the different steps: http://taosecurity.blogspot.com/2006/09/generating-multicast-traffic.html

pauska
  • 19,532
  • 4
  • 55
  • 75
9

iperf is a great tool, but could be a long procedure in installing it; Most repositories don't have this package. Depending on your Distribution, netcat is available in mostly every repository

You can also use netcat :

Server: nc -lu -p PortNr

Client: nc -vzu ServerIP PortNr

Patel95
  • 468
  • 4
  • 7
  • +1 Ah! Awesome! I'm gonna try this! – Viet Dec 27 '12 at 21:07
  • 8
    This will not work for UDP Multicatst. I tried it with a MC address like 224.4.4.4 and nothing happens. Also strace on it doesn't show any ADD_MEMBERSHIP operation. Multicast is also missing in man nc. I suggest sockperf - see below. – avner Jan 14 '14 at 11:04
  • 1
    example with socat: `socat UDP4-RECVFROM:9875,ip-add-membership=225.2.215.254:0.0.0.0,fork - |hexdump` – Francois Apr 16 '15 at 14:11
  • I don't think this is correct. How would I set the group? – AndreKR Jan 13 '17 at 05:46
  • 1
    This just tests IP direct to the servers ip address not the multicast address – teknopaul May 07 '21 at 13:14
5

I highly recommend sockperf

It's a great tool for checking performance with both TCP and UDP, including UDP Multicast.

Example of a multicast UDP stream:

  • on the server: sockperf server -i 224.4.4.4 -p 1234
  • on the client: sockperf ping-pong -i 224.4.4.4 -p 1234
Chris
  • 105
  • 5
avner
  • 151
  • 1
  • 3
2

If one server is already listening on multicast (netstat -g will tell you if it is).

You can broadcast with normal netcat, and detect with tcpdump.

Send a fixed size message to the multicast address.

echo -n 1234567890| ncat -vu 224.4.4.4 4444

and you should see a 10 byte UDP packet arrive using tcpdump on the server

# tcpdump -i eth0 host 224.4.4.4 and port 444
09:23:26.694624 IP srchost.56837 > 224.4.4.4.4444: UDP, length 10

If you dont have tcpdump, wireshark or pcap will see it too.

Use tcpdump -A if you want to confirm the message is 1234567890.

teknopaul
  • 594
  • 4
  • 4
2

You can use SimpleMulticastAnalyzer - it's a simple .net multicast application that I wrote.

Enjoy.

Eran Betzalel
  • 347
  • 1
  • 3
  • 10
1

You can use iperf, but it seems to have problems above version 1.7.0.

Run server first:

:: 224.0.0.0-224.0.0.255   Reserved for special "well-known" multicast addresses
:: 224.0.1.0-238.255.255.255 Globally-scoped (Internet-wide) multicast addresses
:: 239.0.0.0-239.255.255.255 Administratively-scoped (local) multicast addresses
:: my location blocks ip's in (224.0.1.x)

netsh advfirewall firewall add rule name="iperf 5001 udp in" dir=in action=allow protocol=udp localport=5001

iperf --server --udp --bind 239.192.0.1 --parallel 1

Client:

iperf --client 239.192.0.1 --udp --time 10 --bandwidth 1000m --ttl 7

Or you can try uftp, but you need a file to send.

Server or receiver first:

:: kill when done, "taskkill -im uftpd.exe -f"
copy /y postreceive.bat c:\users\admin

netsh advfirewall firewall add rule name=uftpd dir=in action=allow protocol=udp localport=1044

uftpd.exe -x 1 -M 239.195.1.2 -d -F @LOG -s c:\users\admin\postreceive.bat

netsh advfirewall firewall delete rule name=uftpd
 
certutil -hashfile c:\temp\windows10.0-kb4534273-x64-jan-2020-973.msu md5 | find "c595e9f6fb0dde144be2b8d37c18bb7c"

exit /b %errorlevel%

Client or sender:

set file=windows10.0-kb4534273-x64-jan-2020-973.msu

netsh advfirewall firewall add rule name="uftp" dir=in action=allow protocol=udp remoteport=1044

uftp.exe -S @LOG -x 1 -M 239.195.1.2 -P 239.195.1.2 -ttl 11 -C tfmcc -s 50 %file%

set err=%errorlevel%

netsh advfirewall firewall delete rule name=uftp

exit /b %err%
js2010
  • 143
  • 4
0

You can just simply use multiNC utility, this one allows you to handle multiple connections on the same port, github repository