如何在不知道C ++服务器端口的情况下如何在连接到服务器和服务器ip的接口上发送udp数据包

问题描述

如果我知道服务器所连接的网络接口和服务器IP,但不知道服务器端口。我可以在接口上发送UDP数据包以便服务器可以接收它吗?

如果我在sendto()中设置服务器端口0怎么办? server_addr.sin_port = 0;

解决方法

[I]不知道服务器端口。我可以在接口上发送UDP数据包以便服务器可以接收它吗?

否-除非您希望将UDP数据报发送到每个可能的UDP端口(即65,535数据报-可能但非常低效,并且可能破坏在那些端口上接收UDP数据报的其他软件),否则不会。

>

如果我在sendto()中设置服务器端口0怎么办? server_addr.sin_port = 0;

0对sendto()没有特殊含义,但是port 0 is reserved不应使用;因此在server_addr.sin_port = 0调用之前指定sendto()不会有任何用处。

大多数软件通过预先选择服务器和客户端都同意在其上进行通信的“众所周知的”端口号来解决此问题,至少对于初始流量而言。

,

UDP是基于IP的和基于端口的,即UDP数据包的标头中同时包含目标IP和目标端口号。即使您可以将UDP数据包转储到网络接口上,如果目标服务器与正在侦听的IP /端口不匹配,目标服务器也会忽略该数据包。

因此,您根本无法将UDP数据包发送到未知IP和/或未知端口。如果您不知道服务器的IP /端口,则需要事先了解它的含义。请询问服务器管理员,或者检查服务器是否在可以从中读取其当前IP /端口的位置进行广告。

否则,我只能看到发件人的接口是否与服务器建立了专用连接,并且服务器使用的是杂乱的数据包读取(例如使用pcap库)来处理所有数据包,无论目的地为何,它都能看到。