Muszę odkryć wszystkich sąsiadów sieciowych w Linuksie (oni też korzystają z Linuksa) i muszę uzyskać ich adresy IP (3 warstwa). Jakieś pomysły, jak to zrobić?

Btw, muszę to zrobić w C, a nie w shell

Z góry bardzo dziękuję!

1
shaggy 19 lipiec 2011, 11:22
1
Używanie nmapa lub przyglądanie się, jak to działa, może pomóc w znalezieniu maszyn z Linuksem.
 – 
vpit3833
19 lipiec 2011, 11:25

3 odpowiedzi

Najlepsza odpowiedź

Co powinieneś zrobić, to sprawić, by sąsiedzi uruchomili demona, który odpowiada (z odpowiedzią unicast do nadawcy) na multicasty UDP.

Następnie wyślij multicast UDP z TTL równym 1 (aby nie był kierowany) i posłuchaj, kto odpowie. Otrzymasz odpowiedzi tylko od sąsiadów, na których działa agent.

Inną możliwością jest użycie istniejącego protokołu, który już to robi, na przykład mDNS.

3
MarkR 19 lipiec 2011, 13:22
+1 dla mDNS, więcej wyszukiwanych haseł Google prowadzi tutaj: Bonjour / Avahi / ZeroConf.
 – 
Prof. Falken
19 lipiec 2011, 13:32

Nie ma gwarantowanego sposobu, aby to zrobić, jeśli dane maszyny nie współpracują.

Najlepsze, co możesz zrobić, to przeskanować prawdopodobne adresy i zbadać każdy z nich, aby sprawdzić, czy możesz uzyskać odpowiedź — sondą może być cokolwiek, od prostego żądania echa ICMP (ping) po wyrafinowany, zniekształcony pakiet, który próbuje wywołać odpowiedź ze zdalnego hosta.

Wymagany poziom zaawansowania i to, czy w ogóle zadziała, zależy całkowicie od tego, jak mocno chroniony jest dany host itp.

Jak zauważył już komentator, istnieją całe programy, takie jak nmap, które są poświęcone próbie odkrycia tych informacji, co daje pewne wyobrażenie o tym, jak nietrywialne może to być.

Z drugiej strony, jeśli hosty współpracują ze sobą, może wystarczyć proste rozgłoszeniowe żądanie echa ICMP.

2
TomH 19 lipiec 2011, 11:54

Jeśli w Twoim segmencie używany jest całkiem przyzwoity przełącznik, możesz wykryć sąsiadów w warstwie łącza, sprawdzając bazę danych przekazywania jednego z przełączników. Powinieneś być w stanie uzyskać to w miarę automatycznie przez SNMP, sprawdź dokumentację swojego przełącznika.

Gdy masz już listę sąsiadów łączy, możesz spróbować znaleźć ich adresy IP, ale pamiętaj, że mogą mieć ich wielu lub wcale. W tym celu potrzebujesz jakiegoś odwróconego ARP. Być może twój router przechowuje listę skojarzeń MAC-to-IP i możesz ją odpytywać (ponownie SNMP byłoby najwygodniejszym rozwiązaniem).

1
Kerrek SB 19 lipiec 2011, 13:28