所以我可以使用这个 netcat 命令来检查 UDP 端口是否打开:
$ nc -vz -u 10.1.0.100 53
Connection to 10.1.0.100 53 port [udp/domain] succeeded!
Run Code Online (Sandbox Code Playgroud)
与 TCP 不同,UDP 是无连接的(即发即忘)。那么在高层次上有没有人知道 netcat 是如何知道 UDP 端口是打开的?它是否要求回复或类似的东西?
小智 23
事实上,事实并非如此。您可以通过执行以下操作来检查:
$ nc -vz -u 8.8.8.8 53
Connection to 8.8.8.8 53 port [udp/domain] succeeded!
$ nc -vz -u 8.8.8.8 54
Connection to 8.8.8.8 54 port [udp/*] succeeded!
$ nc -vz -u 8.8.8.8 59
Connection to 8.8.8.8 59 port [udp/*] succeeded!
$
Run Code Online (Sandbox Code Playgroud)
所以对于UDP,除非它会给你信息,否则你不能真正检查它。
roc*_*cky 17
根据Connection to Connection to 10.1.0.100 53 port [udp/domain] succeeded!您使用 openbsd-netcat的特定输出判断。
查看代码,测试是绑定到UDP套接字,即有一个打开的连接:
if (vflag || zflag) {
/* For UDP, make sure we are connected. */
if (uflag) {
if (udptest(s) == -1) {
ret = 1;
continue;
}
}
/* Don't look up port if -n. */
if (nflag)
sv = NULL;
else {
sv = getservbyport(
ntohs(atoi(portlist[i])),
uflag ? "udp" : "tcp");
}
fprintf(stderr,
"Connection to %s %s port [%s/%s] "
"succeeded!\n", host, portlist[i],
uflag ? "udp" : "tcp",
sv ? sv->s_name : "*");
Run Code Online (Sandbox Code Playgroud)
udptest问题围绕 3 次写入打开的套接字。请注意,这不适用于 IPv6,并且在检查了大约 100 个端口后失败。
因此,虽然其他建议可能是有效的,但我认为在这种特殊情况下不会发生这种情况。
小智 12
好吧,我有不同的看法:
a:~# nc -luk 10.12.0.12 667 // listen on UDP port 667
b:~# nc -uv 10.12.0.12 667 // check if port is open
nc: 10.12.0.12 (10.12.0.12) 667 [667] open
I love stackexchange // send a message
a:~# nc -luk 10.12.0.12 667
I love stackexchange // receive the message.
Run Code Online (Sandbox Code Playgroud)
因此,基于此,您可以检查该 udp 端口上的 a 和 b 之间的连接是否可行。稍后您可以继续使用 tcpdump 进行检查。
有一个 ICMP 消息表示一个端口,甚至是一个 UDP 端口,已关闭。因此,如果主机发送此消息,则可以假定该端口已关闭。
https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Destination_unreachable
| 归档时间: |
|
| 查看次数: |
141597 次 |
| 最近记录: |