如果我知道服务器所连接的网络接口和服务器IP,但不知道服务器端口。我是否可以在接口上发送UDP数据包,以便服务器可以接收?
如果我在sendto()中设置服务器端口0会怎么样?server_addr.sin_port = 0;
发布于 2020-09-01 05:37:56
我不知道服务器端口。我是否可以在接口上发送UDP数据包,以便服务器可以接收?
否--除非您想要将UDP数据报发送到每个可能的UDP端口(即65,535个数据报--这是可能的,但效率非常低,并且可能会中断可能在这些端口上接收UDP数据报的其他软件)。
如果我在sendto()中设置服务器端口0,该怎么办?server_addr.sin_port = 0;
0对于sendto()没有特殊的含义,但是port 0 is reserved和不应该使用;所以在sendto()调用之前指定server_addr.sin_port = 0不会有任何用处。
大多数软件通过预先选择一个服务器和客户端都同意在其上通信的“众所周知”端口号来处理这个问题,至少对于初始流量是这样。
发布于 2020-09-01 09:01:27
UDP既是基于IP的,也是基于端口的,即UDP数据包在其报头中同时携带目的IP和目的端口号。即使您可以将UDP数据包转储到网络接口上,如果该数据包与服务器正在侦听的IP/端口不匹配,目标服务器也会忽略该数据包。
因此,您根本无法将UDP数据包发送到未知IP和/或未知端口。如果你不知道服务器的IP/端口,你需要事先找出它是什么。或者询问服务器管理员,或者检查服务器是否可能在您可以从中读取的某个地方通告其当前的IP/端口。
否则,我能看到的唯一有效的方法是,如果发送者的接口具有到服务器的专用连接,并且服务器正在使用对包的混杂读取,例如使用pcap库,处理它看到的任何和所有的包,而不管它们的目的地。
https://stackoverflow.com/questions/63675453
复制相似问题