在.NET中创建有效的数据包嗅探器

Xtr*_*osh 3 .net c# proxy packet

我正在寻找创建我称之为代理的东西,尽管这个定义可能有点不准确.

通常,你有这样的事情:

Client --------- Server
Run Code Online (Sandbox Code Playgroud)

我想要做的是引入代理,没有新的层,如下所示:

Client ----+---- Server
           |
         Proxy
Run Code Online (Sandbox Code Playgroud)

我不想要这个:

Client---Proxy---Server
Run Code Online (Sandbox Code Playgroud)

我知道WinPCap做了类似的事情,但据我所知,这是一个记录不完整的主题.

到目前为止,我已经尝试了一些事情,最值得注意的是在与客户端相同的端口上侦听消息.这导致了从随机应用程序接收到大量垃圾数据包(尽管在特定端口上侦听).我找不到很多建议我正在阅读正确的数据,虽然我相信我已经发现现在,经过一些小的修改.

有没有人知道反对使用这种方法的任何理由?或者有更可持续的方式吗?

ste*_*ook 5

如果您寻找数据包嗅探器而不是代理,它将为您提供更多相关链接:

[编辑 - 需要检查的是网卡上是否启用了混杂模式.这告诉网卡将所有数据包传递到堆栈中,而不管内容如何.如果没有这个,你可能无法得到你期望的所有数据包.有关维基百科的更多信息以及如何在Windows 7+上启用混杂模式 ]


cla*_*laj 5

您需要所谓的Raw Socket访问(并使用可以将所有数据包发送到您的网络适配器的集线器或交换机).您还希望您的网卡处于所谓的"混杂模式",它接收所有数据包而不过滤MAC地址.

当你们都在线路上获得流量并且网络适配器将它们未经过滤时,你的程序将获得与网络上发送的数据包完全相同的数据包(尽管你必须确保操作系统的TCP-UDP/IP协议栈没有t偷偷拿起你想听的TCP数据包,但如果你定位其他两台计算机配置就不会有问题了.

我不确定Windows有多好,但无论如何.

当你收到数据包时,你必须读取以太网头(并且你可以根据目标mac地址进行过滤),然后你必须选择IP数据包,以及TCP/UDP数据包并将它们放入为了从交通中获得合理的东西.不是超级简单,但也非常不可能.