Laden...

ARP-poisoning ohne Bibliotheken machbar, welches Format hat ein ARP-Paket & welcher Port?

Erstellt von HexEdit vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.385 Views
H
HexEdit Themenstarter:in
38 Beiträge seit 2019
vor 5 Jahren
ARP-poisoning ohne Bibliotheken machbar, welches Format hat ein ARP-Paket & welcher Port?

Hallo,
ich möchte ein ARP-poisoning Tool programmieren (bitte fragt nicht warum xD).

Meine Frage wäre: Ist so etwas ohne zusätzliche Bibliotheken zu bewerkstelligen wann ja, welches format hat so ein ARP-Packet bzw wie bilde ich so etwas in C#
und über welchen Port muss ich es senden.

Ich hab im Internet folgenden code zum Format in C# gefunden:


  // 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);

ka ob das so richtig ist, aber selbst wenn ja, verstehe ich das nicht wirklich,
da das wie ich es sehe mit externen Bibliotheken gecodet wurde und ich ja auch kein
Copy-Paste code den ich nicht verstehe verwenden will.

Über einen kleinen Beispielcode(mit Erklärung) würde ich mich freuen. Danke im Voraus.

16.807 Beiträge seit 2008
vor 5 Jahren

ARP Poisoning wird i.d.R. nicht für gute Zweck eingesetzt.
Daher verstößt dies prinzipiell gegen den Forengrundsatz und ist daher dicht.

Du kannst aber gerne erklären (via PN) was du vor hast.
Sollte dies ein legitimer Grund sein, so würden wir das Thema wieder eröffnen.
Die Aussage 'fragt nicht' reicht hier aber absolut nicht - so läuft der Hase nicht 😉

Edit: wir können natürlich die Richtigkeit nicht überprüfen, aber die Erklärung via PN macht soweit tendenziell Sinn.
Daher ist das Thema wieder offen.

4.931 Beiträge seit 2008
vor 5 Jahren

Hallo,

den Code hast du ja von How to broadcast ARP packet in C#.
Dort wird u.a. auch WinPCap empfohlen - für .NET gibt es auch eine Umsetzung: Pcap.Net (anscheinend eine Mischung aus C# und C++/CLI).
Ohne so eine Lib müßtest du selber die Funktionalität nachbauen (für das Original-WinPCap gibt es die Sourcen unter WinPcap Developer' Resources - ist aber C-Code!).

Und in Spoofing the ARP Table of Remote Computers on a LAN gibt es ein Beispieltool (inkl. C++-Sourcen).

Und im Wiki-Artikel Address Resolution Protocol (ARP9 findest du den Aufbau eines ARP-Pakets.

PS: In dem von dir geposteten Code sollte statt

Object[] oPacket = new Object[] { ... };

besser

byte[] oPacket = new byte[] { ... };

benutzt werden.

H
HexEdit Themenstarter:in
38 Beiträge seit 2019
vor 5 Jahren

Danke für die schnelle Antwort hast mir damit sehr geholfen.