如何“中间人”特定端口?

如何“中间人”特定端口?

当我想弄清楚某个协议是如何工作的(在这种情况下,端口 80 上的 HTTP 协议),我打开两个终端窗口:

nc -l 80
nc google.com 80

然后,我启动我想要“中间人”的程序,在本例中为 FireFox,然后转到http://localhost:80.

当左侧的终端发送消息时,我将数据复制并粘贴到右侧的终端中。当右侧的终端发送消息时,我对左侧的终端执行相同的操作。

除了手动且繁琐之外,此过程还有两个缺点:

  1. 如果我的速度不够快,连接可能会超时。
  2. 复制和粘贴不能很好地处理二进制数据。

我可以自动化这个过程吗?我能否让一个端口自动将数据转发到另一个端口,甚至另一台机器,以便我检查和调试来回的数据?

答案1

使用索卡特,这是 netcat 的增强版。

1951年萨卡 温格巨人
           网猫索猫

左: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。

相关内容