2010-07-14 21 views
2

Je veux envoyer un paquet ARP via C#. Je ne sais pas comment former un paquet ARP (format) en C#. Quelqu'un peut-il aider à ce sujet? Plus comment envoyer un paquet arp ou le diffuser.comment diffuser le paquet ARP en C#

N'importe quel code d'échantillon est très apprécié. Merci d'avance.

Répondre

2

Voici une bibliothèque que vous pourriez être intéressé par: http://www.beesync.com/packetx/docs/html/index.html

Et Snippit à partir du fichier send.cs.

// Get adapter hardware address and IP address 
    Adapter oAdapter = (Adapter)oPktX.Adapter; 
    string sHWAddr = oAdapter.HWAddress; 
    string sIPAddr = oAdapter.NetIP; 
    string sIPMask = oAdapter.NetMask; 
    Console.WriteLine("MAC Addr = " + sHWAddr); 
    Console.WriteLine("IP Addr = " + sIPAddr); 

    // Send ARP request for this IP address 
    string sIPReso = "11.12.13.14"; 
    char [] aDelimiter = {'.'}; 
    string[] aIPReso = sIPReso.Split(aDelimiter, 4); 
    string[] aIPAddr = sIPAddr.Split(aDelimiter, 4); 

    // Build ARP packet 
    Object[] oPacket = new Object[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
    Convert.ToByte("0x" + sHWAddr.Substring(0,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(2,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(4,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(6,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(8,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(10,2), 16), 
    0x08, 0x06, 0x00, 0x01, 
    0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 
    Convert.ToByte("0x" + sHWAddr.Substring(0,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(2,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(4,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(6,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(8,2), 16), 
    Convert.ToByte("0x" + sHWAddr.Substring(10,2), 16), 
    Convert.ToByte(aIPAddr[0], 10), 
    Convert.ToByte(aIPAddr[1], 10), 
    Convert.ToByte(aIPAddr[2], 10), 
    Convert.ToByte(aIPAddr[3], 10), 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    Convert.ToByte(aIPReso[0], 10), 
    Convert.ToByte(aIPReso[1], 10), 
    Convert.ToByte(aIPReso[2], 10), 
    Convert.ToByte(aIPReso[3], 10), 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 

    // Send 100 ARP requests  
    oAdapter.SendPacket(oPacket, 100); 

Edit:

La meilleure façon de le faire est à l'aide des bibliothèques WinPCAP maintenant ils viennent officiellement en C et non C# mais vous pouvez importer le wpcap.ddl si vous avez installé winpcap , Heres d'autres ressources que vous voudrez peut-être vue:

http://geekswithblogs.net/dotnetnomad/archive/2008/01/31/119140.aspx

http://bytes.com/topic/c-sharp/answers/278941-how-wrap-winpcap

Et voici un renifleur GUI avec source:

http://www.codeproject.com/KB/IP/dotnetwinpcap.aspx

+0

Merci mais le format d'en-tête ARP n'est pas correct, plus je ne veux pas utiliser tiers et ce code donne erreur « format non » Pls aider sur ce. –