🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#244493
Author: heby
Date: Tue, 02 Mar 2021 19:35
34 lines
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
#244495
Author: Dominik Ałaszewski
Date: Wed, 03 Mar 2021 07:43
26 lines
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
#244498
Author: Mateusz Viste
Date: Wed, 03 Mar 2021 08:00
10 lines
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
#244500
Author: heby
Date: Wed, 03 Mar 2021 08:54
8 lines
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