![查找哪个系统正在通过特定端口进行传输](https://linux22.com/image/31119/%E6%9F%A5%E6%89%BE%E5%93%AA%E4%B8%AA%E7%B3%BB%E7%BB%9F%E6%AD%A3%E5%9C%A8%E9%80%9A%E8%BF%87%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%E8%BF%9B%E8%A1%8C%E4%BC%A0%E8%BE%93.png)
我正在使用命令nc -lu <port no.>
来查找给定端口上是否正在接收任何数据。如果正在进行传输,我就会获取数据(但不知道从哪里开始!)。有什么方法可以为我提供发射机的IP地址吗?
wireshark
在nmap
那里,但如果可能的话,我想要一条更短的路。
更新:我想nc -luv
这就是我想要的,但一次它只显示一个IP。我想知道是否有多个系统正在通过该端口进行传输?
答案1
如果应用程序使用特定协议,则可以使用 ngrep(用于包检查)或 tcpdump(用于端口/主机跟踪)。这对于路由器、代理或 DNS(如果您可以将应用程序映射到主机名)来跟踪使用情况特别有用。
ssh 的示例:
ngrep SSH-2.0
或通过 dns 访问站点(DNS 可以缓存,但从长远来看,您可以看到谁在使用它)
ngrep bad.site.org port 53
或通过 ip 连接:
tcpdump host bad.site.org
最后,您可以使用带有 -A 选项的 nmap 来帮助将端口映射到特定协议:
nmap -A 192.168.0.0/16 -p 8000-9000 2>/dev/null | grep "Interesting ports on\|open"
如果 nmap 设法识别它,这将显示 IP、开放端口和协议/服务
答案2
如果应用程序使用特定的网络端口,nmap
就是你的朋友。
如果没有,您需要某种监控或部署软件,或者需要在每台服务器上运行脚本来查找已安装的内容和正在运行的内容。例子:
ssh servername 'ps -ef|grep appname|grep -v grep'
将向您显示该应用程序是否正在实际运行。
答案3
我喜欢到目前为止发布的答案。以下是一些其他选项:
将选项添加-v
到 nc.这将显示(仅!)接收 UDP 数据包的第一个源地址。
另外,netstat -nu
似乎还有一些 UDP 会话的连接状态信息。
答案4
我有另一个想法,我只是将其用于类似的目的:
添加一条规则到你的 iptables :
-A INPUT -p tcp --dport <PORT_TO_MONITOR> -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
这将为该端口的每个新连接在系统日志中添加一行。
我相信,您还可以将其重定向到单独的日志文件。