时间:2011-01-14 21:50:20

标签: c++ networking broadcast ping

我正在尝试在WinXP SP3上ping广播地址255.255.255.255。

如果我使用命令行,则会收到主机错误:

C:\>ping 255.255.255.255
Ping request could not find host 255.255.255.255. Please check the name and try again.

如果我使用iphlpapi尝试使用C ++程序,IcmpSendEcho()失败,GetLastError返回11010 IP_REQ_TIMED_OUT

HANDLE h = ::IcmpCreateFile();
IPAddr broadcast = inet_addr( "255.255.255.255" );
BYTE payload[ 32 ] = { 0 };
IP_OPTION_INFORMATION option = { 255, 0, 0, 0, 0 };

// a buffer with room for 32 replies each containing the full payload
std::vector< BYTE > replies( 32 * ( sizeof( ICMP_ECHO_REPLY ) + 32 ) );

DWORD res = ::IcmpSendEcho( h, 
                            broadcast, 
                            payload, 
                            sizeof( payload ), 
                            &option, 
                            &replies[ 0 ], 
                            replies.size(), 
                            1000 );
::IcmpCloseHandle( h );

我可以毫无问题地ping本地广播192.168.0.255

我需要做什么来ping全球广播?

谢谢, PaulH

2 个答案:

答案 0 :(得分:3)

据我所知,这在Windows中不起作用。在Linux OS中,您可以ping 255.255.255.255,但路由协议不会在本地网络之外中继255.255.255.255广播。

你想要达到什么目的?您准备好连接地球上的每台计算机都会响应吗? 我很害怕...


顺便说一句,你应该准备好即使在本地网络中也没有人会响应广播ping。 This question on SF可能很有用。

答案 1 :(得分:0)

广播UDP已经过时了大约20年。最不可能通过路由器到达另一个子网。