在 Windows 11 上使用(管理员)Powershell 我尝试使用ncat.exe
(版本 7.95)通过接口 192.168.200.5 在 UDP 端口 28500 上向该网络 192.168.200.x 中的设备发送消息。
我正在使用命令
ncat.exe -u 192.168.200.5 28600
然后我输入我想发送的文字,比如
EXAMPLE
然后我得到错误
Ncat: An existing connection was forcibly closed by the remote host. .
似乎没有其他服务使用该端口在 Windows 上运行,并且ncat.exe
应该允许通过防火墙(公共和私有)。
我还能尝试什么来修复此错误,因为似乎ncat.exe
没有发送任何内容。也许有更好的工具?
由于您指定了自己的IP 地址作为目的地,因此您实际上是将数据包发送到同一台机器上您自己的操作系统。
对于套接字“目标”地址与发送主机相同,没有特殊的解释,因为这会产生歧义——在许多情况下,人们实际上只想将数据包发送到同一主机,或者发送到“可能是也可能不是”同一主机的任意目的地。
(相反,当路由将相同主机的地址指定为“网关”时,它是明确的——“使用自身作为网关”的字面解释是没有意义的,这为通常的替代含义“通过具有此 IP 地址的接口发送,没有任何网关”创造了空间。)
广播数据包是通过明确地将数据包发送到“广播”地址来实现的,该地址(包括 IPv4 和IPv6 中
255.255.255.255
的地址)中也包含该地址。ff02::1
在 IPv4 情况下,255.255.255.255 将使用“默认路由”指向的任何接口,但您也可以使用子网/接口特定
192.168.200.255
(假设您的网络是 /24 - 不同的网络掩码会导致不同的广播地址,但它始终是子网的“最后”地址),或者让程序在发送数据包之前明确绑定到接口作为单独的 SO_BINDTODEVICE 操作(我不知道 ncat 是否公开了此选项)。在 IPv6 情况下,
ff02::1
是链路范围地址,因此必须将接口指定为地址的一部分,例如ff02::1%20
。Linux 接受命名的,Windows 需要您可以在或其他各种工具ff02::1%eth0
中看到的数字接口索引。route print
多播数据包的实现方式类似,但具有特定的“组”地址,例如,您可以将数据包发送到
224.0.1.42
或ff02::abcd:123
(需要相同的%index
规范)。请注意,224.0.0.x
地址只是名义上的多播,但实际上按照规范进行广播,正如前面提到的那样ff02::1
——尽管我认为现有协议(如 mDNS)使用 224.0.0.x 组而不是“真实”广播仍然具有优势。如果您观察 Wireshark 捕获(例如,将捕获过滤器设置为
multicast
),您将看到大多数通过 IPv4 的发现数据包要么被发送到255.255.255.255
广播(当开发人员不担心浪费移动设备的电池寿命时),要么被发送到多播组,如224.0.0.251
/ff02::fb
(mDNS)或239.255.255.250
/ff02::c
(UPnP/SSDP)。