Answers:
如果要查看是否可以从远程计算机建立TCP连接,请在该计算机和目标计算机上安装OpenCSW,然后在两者上都安装netcat。这是使用netcat测试TCP连接的语法:
nc -vz targetServer portNum
例如,在“ homeServer1”上检查SSH:
nc -vz homeserver1 22
这使您能够测试来自远程系统的TCP级别的连接。还可以将Netcat配置为侦听端口而不是充当客户端。要使其监听TCP / 8443:
在将容纳应用程序的服务器上: nc -l homeserver1 8443
在位于防火墙之外的计算机上: nc -vz homeserver.fqdn 8443
这是成功执行的一个示例:
[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
Connection to ditirlns01.ncat.edu 8443 port [tcp/pcsync-https] succeeded!
执行失败:
[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
nc: connect to ditirlns01.ncat.edu port 8443 (tcp) failed: Connection refused
防火墙在阻止请求时应回复ICMP消息。但是,不一定是这种情况(您会对这篇文章很感兴趣)。
您可以从外部进行测试,以查看是否可以通过防火墙访问端口,如果可以,则是否正在侦听该端口。这是涉及tcp请求的三种不同情况,您可以使用wireshark
,或其他一些数据包嗅探器进行观察,以及会看到什么:
1)防火墙拒绝请求
您会收到ICMP消息,并且发出请求的工具应立即告诉您一些与此相关的信息(“无法访问,禁止管理员”等)。“工具”是指您用来发送请求的客户端(我曾经telnet
)。消息1的详细信息取决于防火墙的配置方式,但是“端口不可达”可能是最常见的。
“没有到主机的路由”可能表明这一点,但也可能表明更细微的路由问题。
2)防火墙丢弃数据包
没有答复,因此该工具将等待直到超时或您感到无聊。
3)防火墙允许数据包(或没有防火墙),但是端口上没有监听。
您会收到一条TCP RST / ACK消息。我想TCP协议需要这个。换句话说,如果端口上没有监听任何内容,则操作系统本身将发送此答复。仅仅根据工具报告,可能很难将其与#1区别开来,因为在两种情况下可能说相同的话(但是,最有可能将其区分为“连接被拒绝”与#1,“网络不可达”)。 )。在客户端计算机的数据包嗅探器中观察到,场景1(ICMP拒绝消息)和场景3(TCP RST / ACK消息)明显不同。
此处唯一的其他选择是防火墙允许数据包通过,并且正在侦听某些内容,因此您可以成功建立连接。
换句话说:假设您的网络通常可以正常工作,如果您获得#1或#2,则意味着防火墙正在积极阻止访问该端口。如果服务器未运行但端口可访问,则将发生#3,当然(隐式)#4是成功的连接。
您可以使用该命令netstat
查看端口是否已打开并正在侦听。
$ netstat -anp | less
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:41716 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:17500 0.0.0.0:* LISTEN 3034/dropbox
tcp 0 0 0.0.0.0:17501 0.0.0.0:* LISTEN 3033/dropbox
tcp 0 0 127.0.0.1:2143 0.0.0.0:* LISTEN 3191/ssh
tcp 0 0 127.0.0.1:2025 0.0.0.0:* LISTEN 3191/ssh
输出显示正在侦听TCP端口的进程(最右边的列)。端口号是IP地址后面冒号后面的数字(例如0.0.0.0:111将是端口111)。
IP地址显示本地和外部地址。本地将是您的系统,而外部将是连接到TCP端口或连接到其中一个TCP端口的任何地址。
因此,对于端口22,这是在我的系统上运行的ssh守护程序,这是对连接的侦听。一旦有人尝试连接到ssh
守护程序,它将派生自己的副本并将该连接推到另一个端口,从而使TCP端口22保持打开状态,以便在有其他连接时进入。
netstat -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
防火墙配置和防火墙配置的状态是特定于防火墙/ OS的。
您可以从server2尝试一下:
nmap server1
nc
在可访问端口但没有侦听器时报告“连接被拒绝”,而在防火墙通过icmp取消请求后,则报告“网络不可达”(这意味着端口上可能有或没有服务) )。如果防火墙丢弃了该数据包而不是实际拒绝它,nc
它将暂停一会儿。