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

时间:2013-12-25 00:40:05

标签: c# .net proxy packet

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

通常,你有这样的事情:

Client --------- Server

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

Client ----+---- Server
           |
         Proxy

我不想要这个:

Client---Proxy---Server

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

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

是否有人知道使用此方法的任何原因?还是有一些更可持续的方式吗?

2 个答案:

答案 0 :(得分:5)

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

[编辑 - 其他要检查的是网卡上是否启用了混杂模式。这告诉网卡将所有数据包传递到堆栈中,而不管内容如何。如果没有这个,你可能无法得到你期望的所有数据包。有关此on Wikipediahow to enable promiscuous mode on Windows 7+]

的详情

答案 1 :(得分:5)

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

如果你们都获得了线路上的流量而网络适配器将它们未经过滤,那么你的程序将获得与网络上发送的数据包完全相同的数据包(尽管你必须确保操作系统的TCP-UDP / IP)堆栈不会潜入您想要收听的TCP数据包,但是如果您定位其他两个不会出现问题的计算机配置。

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

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

相关问题