![如何“中间人”特定端口?](https://linux22.com/image/77435/%E5%A6%82%E4%BD%95%E2%80%9C%E4%B8%AD%E9%97%B4%E4%BA%BA%E2%80%9D%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
当我想弄清楚某个协议是如何工作的(在这种情况下,端口 80 上的 HTTP 协议),我打开两个终端窗口:
nc -l 80
nc google.com 80
然后,我启动我想要“中间人”的程序,在本例中为 FireFox,然后转到http://localhost:80
.
当左侧的终端发送消息时,我将数据复制并粘贴到右侧的终端中。当右侧的终端发送消息时,我对左侧的终端执行相同的操作。
除了手动且繁琐之外,此过程还有两个缺点:
- 如果我的速度不够快,连接可能会超时。
- 复制和粘贴不能很好地处理二进制数据。
我可以自动化这个过程吗?我能否让一个端口自动将数据转发到另一个端口,甚至另一台机器,以便我检查和调试来回的数据?
答案1
使用索卡特,这是 netcat 的增强版。
左:1951年型号的瑞士军刀,伊夫利安夫斯摄。右:温格“巨人”,斯拉蒂巴特法斯摄。
socat TCP-LISTEN:8080 TCP:google.com:80
(您需要 root 权限才能侦听低于 1024 的端口,因此请选择更高的端口。)
但如果你想要观察流量,并且你有 root 权限,那么就可以删除它并运行Wireshark。启动它,将过滤器设置为tcp.port == 80
,开始侦听默认网络接口,然后开始浏览。
请注意,Google 会将您重定向到 HTTPS。如果您查看 HTTPS 流量,您只会看到加密的 TLS 连接,除非您想观察 TLS 握手,否则这没什么意义。虽然您可以通过向浏览器提供虚假证书颁发机构来拦截 HTTPS 会话,但设置起来比较困难。如果您想观察 HTTP 协议,请坚持使用未加密的版本,即不使用 SSL 的站点。
答案2
**如果它在本地主机中,你可以嗅探它。查看 ngrep、tcdpump 或wireshark。
ngrep -q "." "port 80"
或者,您可以在循环中使用 socat。