首页 > 解决方案 > 如何在不知道 C++ 中的服务器端口的情况下在连接到服务器和服务器 ip 的接口上发送 udp 数据包

问题描述

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

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

标签: socketsudpsendto

解决方案


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

因此,您根本无法将 UDP 数据包发送到未知 IP 和/或未知端口。如果您不知道服务器的 IP/端口,则需要事先找出它是什么。询问服务器管理员,或检查服务器是否可能在您可以读取的地方公布其当前 IP/端口。

否则,我可以看到这一切正常工作的唯一方法是,如果发送方的接口与服务器有专用连接,并且服务器正在使用混杂的数据包读取,例如使用 pcap 库,处理它看到的任何和所有数据包,不管他们的目的地。


推荐阅读