Pure Python Parallel Pinger

osszedobtam egy ilyet, hatha masnak is hasznos lehet:

https://github.com/gereoffy/arp4/blob/main/pinger/ping.py

megadsz neki egy ip listat es opcionalisan a csomagszamot/intervalt, es tolja parhuzamosan a pinget nekik, majd visszaad egy dict-et a beerkezett valaszok (echo-reply) szamaval per ip.

mindezt kb masfel oldal python3 koddal, semmi external dependency, mivel socket/select-et hasznal.

80 hosttal (amibol 4 down, 1 meg doglodik) tesztelve, szepen mukodott.

Hozzászólások

Valaki innen huprol irt egy pinglong (vagy longping, mar nemtom) nevu programot, ami az eredeti pinget hivogatta, es a kimenetet parse-olta. Igy nem kell neki semmi speci jog.

A strange game. The only winning move is not to play. How about a nice game of chess?

> ami az eredeti pinget hivogatta

eddig en is azt csinaltam, az nem nagy kunszt, csak epp eleg nehez 80+ pinget parhuzamosan es hatekonyan futtatni...

a jogok engem nem erdekelnek, rootkent fut ahol kell, de amugy van egy trukk amivel DGRAM-kent (mivel a RAW packet miatt kell a root neki) meg lehet azt kerulni, de ott mas limitek is bejonnek akkor.

> nem kell full root jog

lehet. de engem nem erdekel, ugyis rootkent fut. szerintem kisebb kockazat rootkent icmp csomagokat kuldeni py-bol, mint kulso programokat (pl. ping) hivogatni osszetakolt commandlineokkal...

> Meg kell nézni a scapy python tool hogy csinálja ezt...

az itt levo pelda alapjan sudo kell ennek is a ping-hez...

na ez az fping tenyleg erdekes, ha korabban ismertem volna lehet nem irok sajatot :)

bar az en megoldasom azt is nezi, ha reachable de csomagvesztes van (3 state van, off/on/lossy), valamint ami a fontosabb, hogy a topologia szerint megy es a riasztasokat csak a legkozelebbi eszkozrol kuldi (ami arra csatlalakozik stb azokra minek riasszon kulon). ezt bash-ban lekodolni sem lenne annyira trivialis, bar nyilvan nem lehetetlen.

Hasonlót másr sokan írtak, de az fping a legrégebbi - illetve újraírták ás gyorsították. Van a pythonhoz is valami ping lib, meg multiping is, bár ezekhez nem értek. Gondolom, más is menedzselt már hálózatot.

Ha van asszociatív tömb, akkor az már szinte sql. ;) Ezzel topológiát lel lehet írni shellben is, de bevallom, az eredményt awk-ban dolgoznám fel.

Ha megnézed az fping manját és végzel néhány kísérletet, biztosan - legfeljebb két menetben - meg lehet oldani bármit.

Kérdés, mennyire bonyolult a topológia. Ha egyszerű, akkor "koncentrikus körönként" lehet pingelni. Ha hiba van, akkor riasztás és a node további elemei kimaradhatnak a következő körben.

> Hasonlót másr sokan írtak

tudom... hasznaltunk pl. nagiost is, de en agyfaszt kapok annak a konfolasatol :)

> Van a pythonhoz is valami ping lib

van vagy egy tucatnyi, ma nezegettem oket, aztan irtam inkabb sajatot :)

> meg multiping is

ezt en nem talaltam meg, pedig ez erdekes, majdnem ugyanazt csinalja mint amit en irtam. kar hogy ezt nem lattam elobb...

> mennyire bonyolult a topológia.

valtozo. van pl. olyan hogy router -> egyik mikro -> tuloldali mikro -> router -> tuzfal -> szerverek

meg van amikor switchek vannak egymasba dugdosva fa strukturaban, 3-5 melysegben...

ilyenkor jo lenne ha a riasztasban elsosorban azt az eszkozt latnank ami meghalt, mert en pl tudom mi hogy van osszekotve de aki a riasztast kapja/nezi nem feltetlenul. ha csak kapna egy ip cim listat ami elerhetetlenne valt, nezne ki a fejebol hogy hol a hiba?

Ok, akkor ez egyszerű topológia. Dolgoztam olyannal, ahol 8 irányú redundancia volt - bár annak is ki lehetett nevezni a "sarkát".

Szóval pont jó, amit leírtam. ÍIgy nézhet ki a leírása:

A root IP: IP_monitor, 0, 0

A z távolságú elem: IP_x, node_y, <-node_y(z-1)

Lehet

  • pingetni az összes IP-t, majd vizsgálni az első hibáig az összes node_y-t, növekvő step_z értékkel, vagy
  • pingetni az összes node_y mentén, a step_1, majd step_2... távolságú elemet az első hiba/node eseményig

A második a jobb, mert kevesebb a timeout és lehet rá automatát (FSM) írni.

Legcsúfabb ping programot LabViewban láttam megrajzolva. Nagyon érdekelt hogy hogyan sikerült bele varázsolni. Sok réteg vizuális kód alatt, sajnos nem valami ping dll-re csatlakozott, hanem parancssori pingre. XD

megcsinaltam hogy root jogok nelkul is mukodjon (RAW helyett DGRAM sockettel), az icmp ID igy nem allithato be, de megtanulja az elso valaszbol, hogy mit osztott a gep es utana azzal hasonlitja ossze...