为什么nmap -p <port>和nmap -A扫描显示不同的结果?

我有一个C#应用程序,我已经写在端口789监听。它正在Windows XP Professional计算机上运行。 运行

netstat -an | find "789"

 TCP 0.0.0.0:789 0.0.0.0:0 LISTENING 

当我在不同的linux机器(但是同一个子网)上运行nmap -A -vv ip时,它只报告在主机(即mysql,vnc等)上打开的其他端口,而不是由我的应用程序打开的端口。

但是,当我运行nmap -p 789 ip我得到:

 PORT STATE SERVICE 789/tcp open unknown 

为什么两个nmap扫描有区别? 有什么我可以做的,以确保nmap在进行全面扫描时检测到开放的端口?

默认情况下,nmap只扫描“通用”端口(我相信每个协议1000个最常见的端口)。 由于789不是一个普通的端口,所以没有find。 如果你这样做

 nmap -A -vv -p- ip 

它应该扫描端口1-65535。

这里是nmap文档,告诉默认扫描哪些端口: http : //nmap.org/book/man-port-specification.html

我不确定。 它是检测它为“开放”,这是你想要的吗? 所以它正在倾听。 为什么不能用-Afind,我不确定。

编辑 – 这是从可能不适用于您的版本的旧文档。 运行man nmap ,让我们知道你有什么版本。

从文档中,我看到:

“默认情况下,扫描1到1024之间的所有端口以及nmap附带的服务文件中列出的任何端口。

所以,应该扫描789,即使你没有在你的服务文件中(因为它被标记为“未知”,我相信它不是)。

因此,我不知道。 检查你的man文件是否为你的nmap版本,也许它的行为是使用-A扫描的端口与我发现的文件不同。

这一个是不太可能的,但可能值得研究 – 这种差异可能在你的Linux机器上的用户ID。 NMap的特权用户和非特权用户拥有不同的默认扫描types。 具有root用户的用户可以进行TCP SYN扫描,没有用户的用户将默认为TCP connect()。

你可以做的唯一方法是修改你的nmap的服务文件,这是不推荐的。 -A选项运行高级选项,包括服务检测,操作系统检测,tracerouting等 – 它不扫描整个范围。 如果要扫描所有65k端口,请使用选项-p- 。 除此之外,您只需使用-p 789指定端口。 你最好的select可能是创build一个nmap -p 789的别名,以节省你的时间。

如果您确实需要更改服务文件(默认情况下为/ usr / local / share / nmap / nmap-services),请find读取unknown 789/tcp 0.000075的行,并将其replace为您的程序名称,然后将该编号结束于0.9 ,所以这是nmap包含的顶级端口。 别名会好得多,虽然。