loader
Foto

CAN frame-ek előállítása Python nyelven

A CAN protokoll a mai napig is nagy népszerűségnek örvend, noha a modern autóknál már megjelent a VANET hálózat, de az OBD2 csatlakozón itt is elérhető ez a protokoll. Érdemes tehát minél jobban megismerni, gyakorlati szinten elsajátítani. Ehhez elég egy Python környezet, illetve a python-can nevű csomag, amelynek az alkalmazásával a CAN frame-ek egyszerűen állíthatók elő.

A CAN üzenetek előállíthatók különböző alkalmazásokkal, illetve saját készítésű Python script-ekkel. Ebben a fejezetben különböző megoldásokat mutatunk be, amelyekhez elengedhetetlen a "python-can" csomag telepítése. Ahhoz, hogy elő tudjuk állítani a CAN frame-et, szükséges egy virtuálus CAN interfészt is alklamazni.  

A virtulis CAN interfész megvalósításáról már írtunk itt, de most röviden újra ismertetjük. A következő utasítások segítségével előállítjuk a "vcan0" virtuális CAN interfészt.

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

kep
1. ábra   A virtuális CAN interfész előállítása
 

Ezután nézzük meg, létrejött-e a virtuális CAN interfész. Ehhez adjuk ki a következő utasítást.

ifconfig vcan0

Látható a 2. ábrán, hogy a "vcan0" interfészt létrejött, de még nem működik.

kep
2. ábra   Még nem működik a VCAN0 virtuális interfész
 

Most kapcsoljuk be ezt a virtuális interfészt, ehhez a következő utasítást kell alkalmaznunk.

sudo modprobe can

Látjuk a 3. ábrán a "RUNNING"-ot, tehát a virtuális interfész elérhető és üzemel is.

kep
3. ábra   Már működik a virtuális CAN interfész
 

Hiába működik már a virtuális CAN interfész, hiányzik (vagy hiányozhat) az a "CAN" csomag, amelynek a használatával a CAN frame kényelmesen előállítható. A "python-can" csomagot a következő utasítás segítségével lehet telepíteni.

sudo pip3 install python-can

A telepítés menete látható a következő ábrán.

kep
4. ábra   A szükséges csomag (python-can) telepítése
 

Most már készen áll a környezetünk arra, hogy különböző CAN csomagokat tudjunk előállítani. Az első példával egy CAN frame-et tudunk előállítani. A "bus" létrehozásakor meg kell adni a "socketcan"-t, a virtuális csatorna nevét, illetve a bitrate értékét is.
Az "msg" létrehozásakor a "Message" tulajdonságait kell megadni, látható is, hogy beállítjuk a CAN frame ID-ját, illetve az elküldendő adatok értékeit is. Ha működik a virtuális CAN interfész, akkor nem kerül sor a kivételdobásra, és az előállított CAN frame megjelenik a vcan0 interfészen.

import can

bus = can.interface.Bus(bustype = 'socketcan', channel = 'vcan0', bitrate = 250000)
msg = can.Message(arbitration_id = 0x01, data = [0, 25, 0, 1, 3, 0, 4, 1], is_extended_id = False)

try:
    bus.send(msg)
    print("Üzenetküldés a {}".format(bus.channel_info))
except can.CanError:
    print("Nem lehetett elküldeni a CAN üzenetet.")

 

Az 5. ábrán látható a Python script-nek a futtatása, a CAN frame sikeresen elküldésre került.

kep
5. ábra   A tesztalkalmazás futtatása
 

Nem csak a "can-utils" csomag alkalmazásai (pl.: candump) használhatók arra, hogy az előállított CAN frame megjelenítésre kerüljön, hanem akár a Wireshark is. A Wireshark felületén látható az elküldött CAN üzenet.

kep
6. ábra   A futtatási eredmény a SocketCAN-en
 

A kövektező Python alkalmazás az ennek a kódnak a továbbfejlesztése. Egy ciklust alkalmazunk, amelynek a segítségével bizonyos időközönként (0.5s) ugyanaz a CAN frame kerül elküldésre a vcan0-on keresztül.

import can
import time

bus = can.interface.Bus(bustype = 'socketcan', channel = 'vcan0', bitrate = 250000)
msg = can.Message(arbitration_id = 0x111, data = [0, 0, 0, 0, 0, 0, 0, 0], is_extended_id = False)

try:
    print("CAN üzenet küldése {}".format(bus.channel_info))

    while True:
        bus.send(msg)
        time.sleep(0.5)
except can.CanError:
    print("A CAN üzenetet nem sikerült elküldeni")

 

Ennek az egyszerű script-nek a leállításához nyomjuk meg a CTR + C-t (7. ábra).

kep
7. ábra   A futtatási eredmény a SocketCAN-en
 

Ennek a Python alkalmazás futtatásának az eredménye látható a Wireshark felületén.

kep
8. ábra   Futási eredmény
 

 



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. . . .