【发布时间】:2013-08-05 02:49:38
【问题描述】:
我正在尝试使用 Racket 来侦听通过我机器上的端口 80 移动的数据包。但是,我似乎对数据包嗅探器如何工作的理解、对 Racket 如何工作的理解,或两者兼而有之。
这是我的代码(大部分来自Racket's Wikipedia entry)。
#lang racket
(require racket/tcp)
(define listener (tcp-listen 80))
(define (echo-server)
(define-values (in out) (tcp-accept listener))
(thread (lambda () (copy-port in out)
(print (read in))
(close-output-port out)))
(echo-server))
(echo-server)
当我连接到localhost:80 时,我会收到一些反馈 - 但是当我尝试使用我的网络浏览器时,我无法打印任何内容。如何修改此代码,以便它可以侦听从 Web 请求传入和传出的数据包?
【问题讨论】:
-
通过编写移动我得到的印象是你想拦截到端口 80 的通信,而你的代码只适用于代表它运行的机器的 url,比如localhost/blabla,而不是作为嗅探器。如果您只是在寻找嗅探器,我建议使用wireshark。
-
我相信你想实现一个代理服务器而不是一个回显服务器:一个位于 HTTP 连接中间并“看到”所有传入/传出流量的进程,同时允许正常通信。
-
@ÓscarLópez 是的,我相信这就是我要找的东西 - 你能否详细说明我所拥有的和代理服务器之间的区别(简而言之,如果我问的太多的话)?
-
@sdasdadas 寻找代理服务器的示例。从本质上讲,它是一个介于两者之间的过程,接收来自客户端的请求,将其重定向到真正的目标,接收目标的响应并将其转发给客户端……然后对发生的请求/响应做任何它想做的事情穿过它
-
packet-socket库(最后更新于 2017 年)允许访问原始以太网帧。
标签: port racket packet packet-capture packet-sniffers