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

IQA*_*eas 2 netcat

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

nc -l 80
nc google.com 80
Run Code Online (Sandbox Code Playgroud)

然后我启动我想要“中间人”的程序,在这种情况下是 FireFox,然后转到http://localhost:80.

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

除了手动和乏味之外,这个过程还有两个缺点:

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

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

Gil*_*il' 5

使用socat,它是类固醇上的 netcat 。

萨克 1951 温格巨人
           网猫

左图:1951 年的瑞士军刀模型,摄影:Ivlianvs。右图:温格“巨人”,照片由 Slartibartfass 拍摄

socat TCP-LISTEN:8080 TCP:google.com:80
Run Code Online (Sandbox Code Playgroud)

(您需要以 root 身份侦听 1024 以下的端口,因此请选择更高的端口。)

但是,如果您想要的是观察流量,并且您拥有 root 权限,那么请修改并运行Wireshark。启动它,将过滤器设置为tcp.port == 80,开始侦听您的默认网络接口,然后开始浏览。

请注意,Google 会将您重定向到 HTTPS。如果您查看 HTTPS 流量,您只会看到加密的 TLS 连接,除非您想观察 TLS 握手,否则这没什么意思。虽然您可以通过向浏览器提供虚假的证书颁发机构来安排拦截 HTTPS 会话,但设置起来更困难。如果您想遵守 HTTP 协议,请坚持使用未加密的版本,即不使用 SSL 的站点。