loader
Foto

CAN frame-ek elkapása Python nyelven

Ebben a cikkben előállítunk egy CAN forgalmat a Kali Linux operációs rendszeren, majd a "python-can" csomag használatával készítünk egy Python alkalmazást. Ennek az alkalmazásnak a segítségével előre meghatározott CAN_ID csomagokat kapunk el a virtuális CAN interfészen lévő forgalomban.

Először létre kell hozni egy "vcan0" nevű hálózati interfészt, amelyhez a következő négy utasítás kiadása szükséges.

sudo modprobe can
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

 

Ezután adjuk ki a következő parancsot, és látható lesz a létrehozott virtuális interfész néhány tulajdonsága.

ifconfig vcan0

 

kep
1. ábra   Működik a vcan0 interfész
 

Most egy új terminálablakban indítsuk el a "can-utils" csomagban található "cangen" alkalmazást, amelynek segítségével véletlenszerű CAN forgalmat állítunk elő a "vcan0" interfészen. Ez az alkalmazás különböző konfiurálási lehetőségekkel rendelkezik, válasszuk most a legegyszerűbb módját, és csak az interfész nevét adjuk meg az alkalmazás elindításakor.

cangen vcan0

Látható a következő ábrán, hogy a virtuális interfész létrejött és működik.

kep
2. ábra   A cangen alkalmazás elindítása
 

A "cangen" alkalmazás elindul, és véletlenszerű CAN forgalmat generál, amely megjelenik az újonnan megnyitott terminálablakban (3. ábra).

kep
3. ábra   Véletlenszerű CAN forgalom a terminálablakban kerül megjelenítésre
 

Most egy szövegszerkesztő (pl.: nano) segítségével hozzuk létre a "canR1.py" nevű file-t, és másoljuk be a következő programot. A program sikeres futtatásához elengedhetetlen a "python-can" csomag telepítése.
Létrehozunk egy "bus" nevű objektumot a "socketcan" rétegen, majd a "recv()" függvény segítségével beolvassuk a forgalmat a "vcan0" nevű virtuális hálózati interfészről.

import can 

bus = can.interface.Bus(channel='vcan0', bustype='socketcan') 

while True:
    msg = bus.recv()
    print(str(msg.arbitration_id) + " - " + str(msg.dlc)+ " - " + str(msg.data))

 

A program futtatásának az eredménye látható a következő ábrán. Érdemes megjegyezni azt, hogy minden CAN frame megjelenítésre kerül a terminálablakban, tehát -költői túlzással- az alkalmazásunk működése megegyezik a "cangen" megjelenítési részével.

kep
4. ábra   Minden CAN frame megjelenítésre kerül
 

Módosítsuk most a Python kódunkat azért, hogy csak az előre meghatározott CAN ID-val rendelkező frame-ek kerüljenek megjelenítésre. Ehhez filtereket kell alkalmazni.

import can 
from can import Message

filters = [
{"can_id": 0x100, "can_mask": 0x7FF, "extended": False},
{"can_id": 0x123, "can_mask": 0x7FF, "extended": False},
{"can_id": 0x222, "can_mask": 0x7FF, "extended": False},
{"can_id": 0x345, "can_mask": 0x7FF, "extended": False}
]

bus = can.interface.Bus(channel='vcan0', bustype='socketcan', can_filters=filters) 

print("CAN_ID" + " ------ " + "CAN_DLC" + " ------ " + "CAN_DATA")

while True:
    msg = bus.recv()
    print(str(msg.arbitration_id) + " - " + str(msg.dlc)+ " - " + str(msg.data))

 

Indítsuk el ezt az alkalmazásunkat.

kep
5. ábra   Módosított PYthon kód (canR2.py) futási eredménye
 

Érdemes megemlíteni, hogy a Python kódban a CAN ID hexadecimálisan került megadásra, az 5. ábrán viszont ez az azonosító decimálisan került megjelenítésre.

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

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 Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .

Bemutatjuk most a saját (!) Wifi-s hálózatunk tesztelésének az alapjait. Megnézzük, hogy hogyan lehet biztonságos jelszót választani. Feltörhetetlen rendszer nem létezik, de megismerve a tesztelés folyamatát, válaszokat kaphatunk arra vonatkozólag, h. . . .