如何检查是否可以从多个主机访问多个目的地上的多个端口?

如何检查是否可以从多个主机访问多个目的地上的多个端口?

希望我的标题正确且清晰。

我面临着一些挑战,并认为向网络工程师寻求帮助是最好的选择。

让我先从这个开始:

  1. 如果我想(从我的本地机器)检查某个主机上的某个端口是否打开,我可以这样做:telnet 1.2.3.4 80
  2. 如果我想(从我的本地机器)检查多个主机和端口的可达性,我只需不断替换主机 IP 和端口号。

但是,如果我需要指定源 IP 怎么办?换句话说,我喜欢这样:

telnet source_ip destination_ip port_number

这是我的问题:

  1. 我正在使用 CentOS,telnet没有-b选项。
  2. 我尝试使用nc -s source_ip host_ip port但它返回此错误:

绑定:无法分配请求的地址

  1. 另一件事是我需要以编程方式检查这些端口,因为我有数千个源 IP、数千个目标 IP 和数千个端口。我目前正在使用 Python 进行此操作,但我仍然找不到指定源 IP 的方法。因此,我必须登录到每个主机才能运行我的脚本。

PS 我的表格看起来像这样:

Source, Destination, Port

1.1.1.1, 1.2.3.4, 80

2.2.2.2, 2.3.4.5, 443

2.2.2.2, 1.2.3.6, 443

and so on..

答案1

使用自定义源地址发送数据包很容易,但问题是你需要接收回复目标主机将发送给您的信息。您不可能只说“假装我是 1.1.1.1,哦,但实际的回复应该发送给 2.2.2.2”,然后互联网上的任意主机都会接受它。

简而言之,你不能通过互联网做到这一点。

但是,如果您从目标上游的机器执行这些检查,则此方法将会有效 - 换句话说,从机器的默认网关执行,它将处理所有响应,无论它们的目的地是什么。

如果网关计算机运行的是 Linux,您可以:

  • 使用 scapy 或 libpcap 直接制作和发送欺骗数据包,类似于 nmap 的工作方式。
  • 给iptables添加SNAT规则,让内核进行转换。
  • 使用 IP_TRANSPARENT 套接字选项,它允许您的程序绑定到任何它想要的本地地址(此功能用于“透明代理”)。

相关内容