长答案,请参阅下面的TL;DR!
我认为这不是 Nmap 问题,而是端口转发问题。我想你是从本地网络扫描的(如果不是这样,请忽略这个)。
出于一个非常简单的原因,端口转发通常在本地网络中不起作用。假设这是您的网络:
(A)--+
| ( )
|---(Rpr--R--Rpu)---( Internet )---(X)
| ( )
(B)--+
A 和 B 是您本地网络中的两台计算机,都具有私有 IP 地址,R 是您的路由器(执行 NAT 和端口转发),在您的 LAN 上有一个公共地址 (Rpu) 和一个私有地址 (Rpr)。X 是 Internet 上的计算机,具有公共地址。
您已在 R 上配置端口转发,以便将到达 Rpu:4245(这意味着 IP 地址 Rpu,端口 4245)的数据包转发到 A:4245。
当 X 向 Rpu:4245 发送一个数据包时,它到达 R,R 将目标地址转换为 A:4245 并将数据包路由到 A。当 A 应答时,它从 A:4245 向 X 发送一个数据包。这个数据包被发送到 R,因为它的目的地在 LAN 之外,而 R 是网关。R把source从A:4245改成Rpu:4245,把包路由到X,作为Rpu:4245到X的包到达X,一切OK。
现在当 B 向 Rpu:4245 发送一个数据包时,它会将它发送给 R(因为 Rpu 在 LAN 之外,而 R 是路由器)。假设 R 仍然进行端口转发,它将目的地设置为 A:4245 并将数据包(从 B 到 A:4245)路由到 A。当 A 应答时,它从 A:4245 向 B 发送数据包。这一次它不会将数据包发送到 R,而是直接发送到 B,因为 B 在 LAN 上。数据包作为从 A:4245 到 B 的数据包到达 B,因此不能看作是从 B 到 Rpu:4245 的数据包的答案,源地址不匹配。
如果 R 也将源地址更改为 Rpr(或 Rpu,或 LAN 外的任何地址),这可能会起作用,因为在这种情况下,A 会将答案发送给 R 并且 R 可以反向翻译地址,但这可能不是案件。
TL;博士。从 LAN 外的计算机运行测试:(nmap -sP4245 -p 4245 x.x.x.x指示-sP4245Nmap 在 ping 扫描期间使用 SYN 数据包到端口 4245)。在您的 LAN 中,您只能通过扫描(使用相同的选项)您的私人地址来检查端口是否打开,但这会使端口转发设置未经测试。