loader
Foto

Korrekt Ethernet frame előállítása Python nyelven

Ebben a cikkben egy olyan programot készítünk el Python nyelven, amelynek segítségével a korábbi cikkünkben kiszámolt karaktersorozatot tudjuk kiküldeni a hálózatra.

Korábbi cikkünkben előállítottunk egy UDP csomagot. Most azt nézzük meg, hogy ez a csomag  hogyan küldhető ki a hálózatra. Ahhoz, hogy az általunk összerakott karaktersorozatot (amelynek segítségével a "WE" karaktereket küldjük a 192.168.0.20 IP címre) ki tudjuk küldeni a hálózatra, olyan programnyelvet kell választanunk, amellyel kényelmesen (és egyszerűen) elérjük a számítógép hálózati kártyáját. Erre (is) tökéletes a Python nyelv, ezért ezt fogjuk használni, hogy az alkalmazásunkat implementáljuk.

A kiküldendő karaktersorozat a következő:

12 34 56 78 9A BC BC 9A 78 56 34 12 08 00 45 00 00 1E 04 D2 40 00 40 11 F4 9A C0 A8 00 14 C0 A8 00 0F 00 16 30 39 00 0A F6 D1 57 45

 

Indítsuk el a Linux operációs rendszerünket, és egy szövegszerkesztő (pl.: nano) segítségével gépeljük be a következő programot.

from socket import *

def sendETH(ethernet_packet, payload, interface = "eth0"):
  s = socket(AF_PACKET, SOCK_RAW)

  s.bind((interface, 0))
  return s.send(ethernet_packet + payload)

def pack(byte_sequence):
  return b"".join(map(chr, byte_sequence))

if __name__ == "__main__":
      ethernet_packet = [0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xBC, 0x9A, 0x78,
                         0x56, 0x34, 0x12, 0x08, 0x00]

      ipv4_header = [0x45, 0x00, 0x00, 0x1E, 0x04, 0xD2, 0x40, 0x00, 0x40, 0x11,
                     0xF4, 0x9A, 0xC0, 0xA8, 0x00, 0x14, 0xC0, 0xA8, 0x00, 0x0F]

      udp_header = [0x00, 0x16, 0x30, 0x39, 0x00, 0x0A, 0xF6, 0xD1, 0x57, 0x45]

      payload = "".join(map(chr, ipv4_header + udp_header))

      kuld = sendETH(pack(ethernet_packet),
                  pack(ipv4_header + udp_header))

      print("Kikuldtunk %d byte-ot" % kuld)

 

Futtassuk most ezt az alkalmazást, és a következő eredményt (1. ábra) kapjuk. Ahhoz, hogy más csomagot ne lássunk, alkalmazhatjuk az "UDP" filtert.

kep
1. ábra   UDP csomag a hálózaton
 

Láthatjuk az első ábrán a különböző rétegeken összerakott frame-eket. Az Ethernet II-n látjuk a MAC címeket, illetve a harmadik rétegen találjuk meg az Internet Protocolt, amely tartalmazza már az IP címeket is.

Ha lenyitjuk az "Ethernet II" réteget a Wiresharkban, akkor láthatjuk az EtherType értékét (0x0800), amellyel kiválasztottuk az IP protokollt.

kep
2. ábra   Ethernet II részlete
 

Nézzük meg az IP protokoll részleteit, azaz a harmadik réteget. Ehhez le kell nyitnunk az Internet Protocolt (3. ábra).

kep
3. ábra   Internet Protocol részlete
 

Végül, ha az UDP protokollt nyitjuk meg, akkor megtaláljuk a portokat, a méretet, és persze az átküldött "WE" karaktersorozatot is (4. ábra).

kep
4. ábra   UDP csomag adatmezője, benne a "WE" karaktersorozattal
 

 



Egyéb cikkek

Mappa

További cikkeink ebben a témakörben

Régebbi cikkeink

Elkezdünk egy sorozatot, amelyhez a Kali Linux használata elengedhetetlen lesz, de természetesen folytatjuk a C# nyelv aszinkron használatának a bemutatását is. Az IT biztonság (amely elég széles területet foglal magába) egyik elengedhetetlen eszköze. . . .

Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .

A saját informatikai rendszerünk tesztelésénél előfordulhat, hogy meg kell változtatni a MAC címünket. Hogyan tehetjük ezt meg a Kali Linux segítségével? Megnézzük most ezt ebben a cikkben.. . . .