如何用C#实现 ARP packets (一个42字节的数据结构体)的直接发送?正确给出解决方案者再送100分.

解决方案 »

  1.   

    http://www.codeproject.com/csharp/networkstuff.aspalso seehttp://www.dotnet247.com/247reference/msgs/28/144732.aspx
      

  2.   

    in case you cannot access, here is the solution
     found the MSDN doc has a bug(!?) : 'PhyAddrLen' is both [in, out].This works for me:// =================================================================================================
    using System.Net;
    using System.Runtime.InteropServices;
    ....
    [DllImport("iphlpapi.dll", ExactSpelling=true)]
    public static extern int SendARP( int DestIP, int SrcIP, [Out] byte[] pMacAddr, ref int PhyAddrLen );
    ....
    IPAddress addr = IPAddress.Parse("192.168.x.y"); // TODO: real ip addressbyte[] ab = new byte[6];
    int len = ab.Length;
    int r = SendARP( (int) addr.Address, 0, ab, ref len );
    string mac = BitConverter.ToString( ab, 0, 6 );
    // =========================================================================================--
    Thomas Scheidegger - MVP .NET - 'NETMaster'
    http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/
      

  3.   

    不能用SendARP,这个方法不能发出原始的ARP packets
      

  4.   

    http://www.codeproject.com/csharp/networkstuff.asp这个地方也是用的SendARP,我的目的是要直接发送自己写的ARP packets .
      

  5.   

    http://www.xfocus.net/articles/200209/447.html
      

  6.   

    >>> 楼上老兄,那可不是C#实现的,而且依赖第三方软件.不过看起来可能得到一点启发.
    要自定义ARP包,必须写专用的网卡驱动
    winpcap就是这样的一个驱动和库C#不可能直接做到这些如果你嫌P/Invoke麻烦则可以用VC++.NET做一个托管包装
      

  7.   

    怯怯地问大家一问,能不能用Socket类实现?
      

  8.   

    即便是原始套接字也不可能
    套接字工作于IP层及之上,ARP协议在链路层和网络层之间
      

  9.   

    我试试,从来没用VC++.NET,还不知道会遇到什么问题
      

  10.   

    用别人写的驱动包就可以了,你这个也没要求过滤数据报,我觉得用winpcap就挺好的了.如果你要自己写驱动,也不是不可能的事情,可以在驱动开发论坛看看,我记得ndis的驱动还是可以找到源代码的.
      

  11.   

    谁有在.net下包装好好了的winpcap?
      

  12.   

    我在http://www.woany.co.uk/Default.aspx?tabid=67找到了一个叫WinPcapDotNet v1.0.0的东东,包装了winpcap,好东西!待我完工了来结贴!