我跑完之后
$ 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 的对等地址。