如何实现让局域网里的所有机器访问外网时都经过我的机器?也就是说我的机器可以捕获到其他机器对外网访问的请求。如果不让他访问,要拦截他所发送的请求又该怎么做呢?

解决方案 »

  1.   

    谢谢soaringbird的回答,
    但是,我想知道用代码如何实现
      

  2.   

    简单的就是转发TCP和UDP包,但是要求其它人需要程序和软件的配合。
    如果只是单纯的想截包监听学学Sniffer的机制吧,把网卡设为混杂模式,然后虑包。
    用C#做代理程序,不过即使做代理也是要求程序配合的,比如平时上网如果用代理那是IE的设置,不能保证其它程序也会经过代理的,如果做路由的话,这个应该是可以,但是比较低层麻烦,我不会。
      

  3.   

    建议LZ去研究一下ARP病毒的原理吧。
      

  4.   

    在C#里要做到应该比较难,但是在VC++中实现应该不是很难,方法就是钩掉SOCKET里面的SEND,RECE等等函数,在钩掉这些函数之后在代码中判断数据发送或接收的地址是不是你的机子,如果不是就转发到你的机子,再由你的机子发送!
      

  5.   

    可不可以在必要的时候用c++编码,编译得到dll文件,然后在C#里面来调用啊?
      

  6.   

    搞那么复杂干什么...在你机器上装两块网卡做成网关,每个bit都得从你机器上过,哪个也逃不了...
      

  7.   

    貌似有这方面的网管软件。
    自己要用c#来实现这个功能,不是那么容易的事儿吧。
    倒是简单研究过Sniffer和Arp欺骗程序
    lz研究研究 c#+WinPcap 吧
      

  8.   

    哈哈!
    把你的机器做成代理,如果不能做成代理则用arp欺骗,来实现代理的效果。
      

  9.   

    哪位有用arp欺骗实现模拟网关的源代码啊?能发给我参考一下吗?邮箱:[email protected]
    感激涕零。。
      

  10.   

    首先获得局域网的网关IP,然后为这个IP伪造一份物理地址为你网卡地址的ARP包,不停的在内网广播这个ARP包(这一段欺骗过程可以用一些现有ARP欺骗工具完成,也可以自己写代码完成,只要欺骗成功一般就不再需要这一步了),然后局域网内所有数据包都会发给你的机器,这时程序作如下操作:
    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
    s.IOControl(IOControlCode.ReceiveAll, null, null);
    通过s就能收到所有IP包。