Portál AbcLinuxu, 2. května 2025 09:03
Ping je velmi užitečný příkaz, bohužel je zcela nepoužitelný ve skriptech, protože má každá distribuce svoje specifické formátování. Yeti ho má dokonce na blacklistu programů, jejichž výstup by se neměl parsovat.
Tak mě napadlo, že, kdyby ping
podporoval formátování výstupu (jako třeba lsof
), jeho použitelnost by jen vzrostla. Proto by bylo dobré, kdyby se někdo rozhodl tohle napsat. Jenže každý ví, že fráze, někdo by měl něco udělat, by měla znít, měl bych s tím něco udělat. Takže jsem si stáhnul zdrojové kódy iputils
a začal psát. Kód, který se stará o formátování je z lsof.c
z coreutils
(nebude tu licenční problém? ping je BSD a coreutils GPL-2 a přepisovat se mi to moc nechce).
Tohle je zatím první použitelná verze. Formátovací řetězec se zadává parametrem -o
a tady je tabulka podporovaných formátů:
%h .......... hostname %t .......... transmitted %r .......... received %d .......... duplicated %c .......... corrupted %e .......... errors %l .......... packet loss %L .......... packet loss (včetně znaku %) %i .......... time (v ms)Zbývá dodat formátovací parametry pro
rtt, pipe, ipg a ewma
(ať už ty hodnoty znamenají cokoliv), ale to už bude triviální. Kód zatím neumí pracovat s escapovanými řetězci (\n a podobně). Ale rád přivítám jakékoliv názory na kód, co dodělat, co nedělat a podobně.
iputils-ss020927.tar.gz(119K) - zdrojové kódy iputils
iputils-o.patch.gz (1,5K) můj patch
Tiskni
Sdílej:
--- 1.2.3.4 ping statistics --- 8 packets transmitted, 8 received, 0% packet loss, time 7007ms rtt min/avg/max/mdev = 13.958/39.023/118.546/31.633 msO formátování průběžného výstupu pingu jsem nepřemýšlel, ale není to vůbec špatný nápad. Jak dodělám tohle a trochu pročistím kód, tak bych se na to mohl vrhnout.
Že se ping chová kdevšude jinak, to je známá věc. A zkusil jste fping? Ten je totiž (z pohledu skriptování) mnohem mnohem silnější...
Já samozřejmě neznevažuju vaši snahu. Ale co se týče skriptů, tak u mě fping vede. Například fping -cosi x1 x2 x3 x4 ... a výstup typu alive dead alive alive, to je prostě šupa. Hromada parametrů, hromada věcí, které jde zjistit, cyklické pingání na mnoho destinací najednou. Pro testovací skripty podle mě naprostá šupa, takže si myslím, že děláte zbytečnou práci. (Ne úplně zbytečnou, on ten fping neumí všechno to, co popisujete vy, na druhou stranu umí hromadu jiných věcí. Nechcete místo pingu (který je dobrý jako jednorázový diagnostický nástroj) raději modifikovat fping (který je primárně určen pro skripty))?
Hm, nesouhlasím. Ano, ping je všude. Je to ale jenom tupý diagnostický nástroj, vzhledem ke své ukecanosti a variabilnosti výstupů je sice fajn pro zběžné otestování, do skriptů se ale moc nehodí. K tomu je podle mě fping daleko vhodnější, navíc umí testovat víc destinací naráz a tak vůbec.
Taktická stránka věci je mi ukradená, principiálně si myslím, že než upravovat stávající nástroj (který sice mají všichni, ale museli by si pořídit jeho upravenou verzi), tak je lepší použít jiný nástroj, který to už prostě umí.
Pokud totiž někdo dané funkce potřebuje, tak nebude líný si pořídit něco jiného než ping. A pokud by líný byl, tak ať si trhne nohou.
A jinak samozřejmě, ať Michal pokračuje, nejlépe vylepšováním fpingu, ten taky není úplně dokonalý...
Když přijdu k náhodnému počítači, tak samozřejmě taky použiju ping a neobtěžuju se instalací čehokoliv jiného. K náhodnému počítači ovšem přijdu v situaci, kdy mám diagnostikovat nějaký problém a ping mi pohodlně stačí, protože ho stejně spouštím ručně a na jeho formátování mi nijak zvlášť nezáleží, neb ho čtu já sám.
Pokud mám počítač, na kterém si chci spouštět skripty, které mají nějak výstupu pingu využívat, lze předpokládát, že nad tím počítačem mám dostatečnou kontrolu a v takovém případě mám i možnost použít fping, který je pro daný účel lepší.
Teď jsem se zahryzl do ocasu a nějak se v tom zamotal.
Nezpochybňuju fakt, že výstup pingu je formátován blbě (a nekonzistentně) a že nějaké formátovací volby nebudou na škodu. Nicméně tvrdím, že existuje fping, který je obecně pro použití ve skriptech vhodnější, jak svými možnostmi, tak svým výstupem, a proto se domnívám, že formátování pingu není akutní nutnost.
Vy argumentujete, že ping je základní nástroj dostupný všude, zatímco fping není. To je samozřejmě pravda. Vám se proto líbí možnost mít (standardní) ping s možnostmi formátování (všude) a nebudete tak muset (ať už kvůli lenosti nebo kvůli lacku práv) instalovat fping kvůli elementární síťové diagnostice.
Na to povídám, že je třeba rozlišit dvě situace: základní diagnostický nástroj ping, který je dostupný všude, a u nějž (coby základní diagnostiky) mi prostě nedostatek formátování nevadí. A naopak, pokud vytvářím nějakou oskriptovanou diagnostiku, nebudu mít problém jednorázově nainstalovat fping.
V zásadě se domnívám, že až po sem máme oba pravdu. A vy mě odkážete na člověka, který si stěžuje "že musel vytvářet šílené parsovací skripty pro ping". To je dle mého názoru problém toho člověka, nikoliv pingu. Namísto vytváření šílených skriptů měl totiž použít fping a měl by vymalováno.
PS: Ale v zásadě si myslím, že se bavíme dohromady o hovně Umravnit ping je každopádně práce záslužná.
ping --silent --rtt 1.2.3.4To je věc, kterou chci od normálního pingu.
a SuSE a nejspíš i FC, Mandrivě a dalších. Problém může být spíš v tom, že není v defaultní instalaci, takže si ho instaluje jen ten, kdo ví, k čemu by mu mohl být dobrý…
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.