希望我的标题正确且清晰。
我面临着一些挑战,并认为向网络工程师寻求帮助是最好的选择。
让我先从这个开始:
- 如果我想(从我的本地机器)检查某个主机上的某个端口是否打开,我可以这样做:
telnet 1.2.3.4 80
- 如果我想(从我的本地机器)检查多个主机和端口的可达性,我只需不断替换主机 IP 和端口号。
但是,如果我需要指定源 IP 怎么办?换句话说,我喜欢这样:
telnet source_ip destination_ip port_number
这是我的问题:
- 我正在使用 CentOS,
telnet
没有-b
选项。 - 我尝试使用
nc -s source_ip host_ip port
但它返回此错误:
绑定:无法分配请求的地址
- 另一件事是我需要以编程方式检查这些端口,因为我有数千个源 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 套接字选项,它允许您的程序绑定到任何它想要的本地地址(此功能用于“透明代理”)。