如何检查开放端口是TCP还是UDP?

Imr*_*han 2 sockets port

我正在制作端口扫描仪。我可以通过尝试与端口建立连接来检查端口是否打开,但是,如何检查打开的端口是 udp 还是 tcp?

Ste*_*ich 5

...我如何检查开放端口是 udp 还是 tcp?

您似乎想到的是一条街道,其中端口是房屋号码,并且每个房屋中可能存在 TCP 和/或 UDP。然后你敲门,然后需要弄清楚是 UDP 还是 TCP 打开了门。但这种观点是错误的。

它更像是两条独立的街道,只是门牌号相同。TCP 有一条路,UDP 有另一条路,您可以通过选择套接字类型来决定走哪条路。无需检查谁居住在那里,因为在 TCP 街道中只有 TCP 可以居住,而在 UDP 街道中则只能居住 UDP。

TCP 套接字是使用 AF_INET(或 AF_INET6)和 SOCK_STREAM 创建的。UDP 套接字使用 SOCK_DGRAM 而不是 SOCK_STREAM。因此,通过创建套接字,您就知道您期望什么,即走哪条街。

除此之外,UDP 没有实际连接的概念:虽然可以使用connectUDP 套接字,但这将在本地套接字上设置目标地址。它实际上并不像 TCP 那样向对等方发送任何数据来建立连接。因此,connectUDP 套接字上的 a 基本上总是会成功,无论目的地是否有流量(即端口“打开”)。