如何通过检查套接字来验证端口转发是否已建立?

如何通过检查套接字来验证端口转发是否已建立?

我跑完之后

$ ssh -L 9000:google.com:80 testme@localhost

如何通过检查套接字(互联网和 unix 域套接字)来验证端口转发是否已建立?

谢谢。

答案1

有许多互补的方法可以做到这一点:

在您的本地计算机上

你可以ssh使用选项运行你的命令-v,将会有关于转发的信息:

debug1: Local connections to LOCALHOST:9000 forwarded to remote address google.com:80
debug1: Local forwarding listening on ::1 port 9000.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 9000.
debug1: channel 1: new [port listener]

运行netstat -tulpn,您应该会看到是否有ssh在端口 9000 上运行的条目。这显示了侦听端口。它不显示主动转发的连接!

# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      15557/ssh

在远程机器上

在当前打开的转发端口的会话中,只需~#快速点击,您应该会看到现在是否有任何东西正在使用您的隧道(您可以尝试使用telnet命令连接到 localhost:9000 并查看会发生什么)。

The following connections are open:
  #2 client-session (t4 r0 i0/0 o0/0 e[write]/4 fd 6/7/8 sock -1 cc -1)
  #3 direct-tcpip: listening port 9000 for google.com port 80, connect from 127.0.0.1 port 57060 to 127.0.0.1 port 9000 (t4 r1 i0/0 o0/0 e[closed]/0 fd 9/9/-1 sock 9 cc -1)

netstat -tulpn应该告诉您有关本计算机上打开的端口的信息,但不能保证打开的这些端口是您通过连接建立的端口。大多数时候,您没有远程计算机的 root 访问权限,因此您无法检查 SSH 会话的 PID 和netstat结果中的 PID。

答案2

建立 SSH 连接后,您将在端口 9000 上看到一个侦听套接字:

$ ss -o state listening 'sport = 9000'
Netid Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
tcp   0      128                127.0.0.1:9000                                     *:*
tcp   0      128                      ::1:9000                                    :::*

google.com在与端口 9000 建立连接之前,您不会看到连接;跑步

$ nc localhost 9000

然后在另一个终端你会看到类似的东西

$ ss -o state established 'dport = 80'
Netid Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
tcp   0      0                 10.10.10.2:34948                       216.58.204.142:http

使用属于 Google 的对等地址。

相关内容