Nowe posty

Autor Wątek: Komunikacja user-kernel  (Przeczytany 5966 razy)

sunrise

  • Gość
Komunikacja user-kernel
« dnia: 2009-05-19, 12:51:36 »
Hej:) Mam taki problem - pisze program którego zadaniem jest skanowanie sieci.W tym celu miedzy innymi wykonuje w programie polecenie iwlist czy iwconfig na jednym kompie  i wyniki przesyłam przez sieć do zdalnego hosta(zdalny host agreguje te wyniki z różnych kompów).Jednak słyszałem ze takie cos jest nieefektywne i lepiej komunikować sie bezpośrednio z kernelem przez sockety netlinkowe by pobrać te parametry.Mógłby ktos wyjaśnić czemu?? Z góry dzieki:)

norbert_ramzes

  • Gość
Komunikacja user-kernel
« Odpowiedź #1 dnia: 2009-05-19, 13:37:20 »
Ponieważ parsowanie zajmuje trochę czasu.

sunrise

  • Gość
Komunikacja user-kernel
« Odpowiedź #2 dnia: 2009-05-19, 21:18:07 »
Mógłbyś to uszczegółowić??:)

sunrise

  • Gość
Komunikacja user-kernel
« Odpowiedź #3 dnia: 2009-05-20, 11:14:35 »
Program który sczytuje z danego hosta parametry np. liczba procesów,siła sygnału itp. jest napisany np. w ten sposób(kawałek kodu):
       Runtime r = Runtime.getRuntime();
       Process p = r.exec("iwlist");
       in = new BufferedReader(new InputStreamReader(p.getInputStream()));
      itd.
Jak widzisz ręcznie wykonuje tu konkretne polecenie i jego wyniki wysyłam potem przez sieć,jednak musze zrobić to na zasadzie komunikacji z jądrem przez sockety netlinkowe,jakby ktos mógł dokładnie wyjaśnić czemu takie rozwiązanie jest duzo lepsze od tego kodu powyżej,pzdr:)

norbert_ramzes

  • Gość
Komunikacja user-kernel
« Odpowiedź #4 dnia: 2009-05-20, 14:09:21 »
Cytat: sunrise
Mógłbyś to uszczegółowić??:)
Niepotrzebne operacje na tekście podczas parsowania zajmują duuuuużo czasu.

sunrise

  • Gość
Komunikacja user-kernel
« Odpowiedź #5 dnia: 2009-05-20, 14:51:10 »
Rozumiem że chodzi Ci o parsowanie każdego wpisanego przez usera polecenia przez parser Basha ??

norbert_ramzes

  • Gość
Komunikacja user-kernel
« Odpowiedź #6 dnia: 2009-05-20, 16:34:46 »
Chodzi mi o to że jakieś polecenie (np iwconfig) wypluwa trochę tekstu zrozumiałego dla człowieka a parser (czemu bash?) potrzebuje trochę czasu na 'przetegowanie' tego tekstu. A przez sockety masz szybciej (osobiście nie testowałem ale mogę się założyć).

sunrise

  • Gość
Komunikacja user-kernel
« Odpowiedź #7 dnia: 2009-05-20, 17:29:27 »
OK,rozumiem:),  jeszcze mam takie małe pytanko - iwconfig np(czy dowolne polecenie z wireless tools) wypluwa nam m.in siłe sygnału,adres MAC najbliższego Access Pointa itp - gdzie te informacje znajdują sie w jądrze??Z góry dzięki:)

chmooreck

  • Gość
Komunikacja user-kernel
« Odpowiedź #8 dnia: 2009-05-20, 22:12:37 »
Ja bym poszukał w źródłach iwconfig'a jak to robią... ;-)

wiewiorek

  • Gość
Komunikacja user-kernel
« Odpowiedź #9 dnia: 2009-06-02, 04:26:46 »
Najłatwiej zerżnąć ze źródeł tych narzędzi - tak jak powiedział przedmówca. Sprawdź jednak wcześniej do czego służy bilioteka libnl, być może będzie użyteczna (sam nie jestem pewien co ona robiła, więc na szczegółowe pytania nie odpowiem).

A z tego co wiem to wszystkie takie operacje polegają na założeniu socketa typu RAW i wykonywaniu na nim rządań ioctl, które przesyłają do i z jądra structy z danymi.


à propos pytania gdzie te informacje są w jądrze: zapewne w odpowiedniej strukturze net_device, jednak z racji że jądro nie współdzieli pamięci wirtualnej z procesami użytkownika, nijak się nie można do tych struktur odwołać.