Thread View: pl.comp.os.linux.sieci
4 messages
4 total messages
Started by heby
Tue, 02 Mar 2021 19:35
Odczytanie treści pakietu UDP w bashu
Author: heby
Date: Tue, 02 Mar 2021 19:35
Date: Tue, 02 Mar 2021 19:35
34 lines
2318 bytes
2318 bytes
Cześć. Input: broadcastowy pakiet UDP na jakiś port z treścią będącą znakami ascii. Output zmienna w bashu zawierajaca tą treść. Teraz detale: jest urządzenie które wysyła swój stan w postaci pakietu UDP na ff:ff:ff:ff:ff:ff 255.255.255.255:<port>. Pakiet zawiera dosłownie jedno słowo typu "ON", "ERROR 7" itd. bez żadnej struktury, ciało pakietu to znaki ASCII razem z zerem. Na urządzenie które je emituje nie mam wpływu, ktoś to tak zrobił i tyle. Chciałbym "przyczaić" się na ten pakiet w bashu, a nastepnie, jesli przyjdzie, wydłubać z niego treść i zwrócić w formie zmiennej/env. Mogę przeoczyć pakiety, to nie jest krytyczne. Nie ma tu żadnych zagadnień bezpieczeństwa, to nie jest otwarta sieć, to taki komplenie zamknięty LAN bez dostępu z zewnątrz. Dopuszczam użycie Pythona, ale zanim go użyje: czym mogę zrealizować powyższe zadanie czymś prostym z konsoli? Widzę to tak: czekanie - netcat Parsowanie outputu z pakietu - hmmm awk lub jakiś gotowiec typu readline? Ma ktoś lepszy pomysł? Zerkałem za pomysłami tutaj: https://stackoverflow.com/questions/24247811/listen-for-returning-udp-packets-in-bash Ale jak ktoś ma coś jeszcze...
Re: Odczytanie treści pakietu UDP w bashu
Author: Dominik Ałaszewski
Date: Wed, 03 Mar 2021 07:43
Date: Wed, 03 Mar 2021 07:43
26 lines
2158 bytes
2158 bytes
Dnia 02.03.2021 heby <heby@poczta.onet.pl> napisał/a: > Dopuszczam użycie Pythona, ale zanim go użyje: czym mogę zrealizować > powyższe zadanie czymś prostym z konsoli? _Ja_ bym użył czegoś w rodzaju tcpdump -A udp port 12345 i zapisywał do pliku. A pliku pilnowałbym mechanizmem kernelowym iwatch (np. za pomocą incron)- gdy się zmieni (tcpdump załapie jakiś pakiet) odpalał skrypt, który sparsuje go i podejmie stosowną akcję. Jeśli to 1 akcja na jakiś czas, to pewnie wystarczy wpisać zawartość pliku jako zmienną w bashu, porównywać, czy zawiera stosowny ciąg (coś w rodzaju if [[ $string == *"ERROR"* ]]; then ) i wtedy podejmować akcję. Można na koniec zerować plik, albo skrypt może sobie przechowywać poprzednią zawartość i analizować tylko bieżącą różnicę- wtedy dodatkowo jest historia. -- Dominik Ałaszewski (via raspbianowy slrn) "W życiu piękne są tylko chwile…" (Ryszard Riedel) Wyrażam wyłącznie prywatne poglądy zgodnie z Art. 54 Konstytucji RP Pisząc na priv zmień domenę na gmail.
Re: Odczytanie treści pakietu UDP w bashu
Author: Mateusz Viste
Date: Wed, 03 Mar 2021 08:00
Date: Wed, 03 Mar 2021 08:00
10 lines
1289 bytes
1289 bytes
2021-03-02 o 20:35 +0100, heby napisał: > Pakiet zawiera dosłownie jedno słowo typu "ON", "ERROR 7" itd. bez > żadnej struktury, ciało pakietu to znaki ASCII razem z zerem. A czy nie prościej zrobić to jak człowiek, w formie normalnego programu nasłuchującego na porcie? To kwestia kilkunastu - no może kilkudziesięciu - linijek w C. W googielu można nawet znaleźć gotowce: https://lloydrochester.com/post/c/unix-udp-example/ Mateusz
Re: Odczytanie treści pakietu UDP w bashu
Author: heby
Date: Wed, 03 Mar 2021 08:54
Date: Wed, 03 Mar 2021 08:54
8 lines
1626 bytes
1626 bytes
On 03/03/2021 09:00, Mateusz Viste wrote: >> Pakiet zawiera dosłownie jedno słowo typu "ON", "ERROR 7" itd. bez >> żadnej struktury, ciało pakietu to znaki ASCII razem z zerem. > A czy nie prościej zrobić to jak człowiek, w formie normalnego > programu nasłuchującego na porcie? Można, problem w tym że nie ja będę to "utrzymywał". Wiec im więcej basha a mniej pythona, tym lepiej. Co nie oznacza że będę z tego zadowolony.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads