Znajdowanie innych komputerów w sieci za pośrednictwem wiersza polecenia

30

Mam garść komputerów Mac w sieci domowej i mam dostęp do powłoki tylko do jednego z zewnątrz. Jak mogę dowiedzieć się, jaki jest adres IP innych komputerów?

Jon Haddad
źródło

Odpowiedzi:

39

Spróbuj arp -azobaczyć aktualną tabelę arp komputera. Wyświetli tylko te adresy IP, z którymi komputer współpracował. Dane wyjściowe takie (trochę zasłoniły, aby ukryć adresy MAC w mojej sieci):

$ arp -a
? (10.1.168.1) at xx:xx:9e:82:ab:f6 on en1 ifscope [ethernet]
? (10.1.168.16) at xx:xx:29:d3:17:8 on en1 ifscope [ethernet]
? (10.1.168.115) at xx:xx:2:4f:76:14 on en1 ifscope [ethernet]
? (10.1.168.131) at xx:xx:6b:d0:36:a5 on en1 ifscope [ethernet]
? (10.1.168.134) at (incomplete) on en1 ifscope [ethernet]
? (10.1.168.137) at xx:xx:65:46:cd:b8 on en1 ifscope [ethernet]
? (10.1.168.255) at ff:ff:ff:ff:ff:ff on en1 ifscope [ethernet]
? (192.168.4.255) at ff:ff:ff:ff:ff:ff on vmnet8 ifscope [ethernet]
? (192.168.110.255) at (incomplete) on vmnet1 ifscope [ethernet]

Jeśli nie masz dodatkowych informacji na temat tego, który komputer jest, możesz uzyskać nieco więcej informacji, identyfikując producentów kart sieciowych poprzez wyszukiwanie adresu MAC .

Doug Harris
źródło
12
Niestety, zajęło prawie 4 lata, aby oznaczyć to jako poprawne.
Jon Haddad
Co to znaczy „ arp -apokaże tylko te adresy IP, z którymi komputer współpracował”. ? Czy powinienem najpierw pingować transmisję (192.168.110.255) i uzyskać odpowiedź z każdego urządzenia, a następnie użyć arp, aby uzyskać pełną listę, ponieważ właśnie współdziałałem / pingowałem całe urządzenie?
Weishi Zeng
10

Zakładając, że wszystkie inne maszyny znajdują się w tej samej domenie rozgłoszeniowej, co ta, do której masz dostęp, często wystarczy pingowanie adresu rozgłoszeniowego. Nie znajdzie maszyn, które śpią, ani tych skonfigurowanych, aby nie reagować na pingi, ani tych, które będą reagować na pingi, ale nie będą transmitować pingów.

% ifconfig -a | grep broadcast
        inet 192.168.1.241 netmask 0xffffff00 broadcast 192.168.1.255
% ping -i 5 -c 2 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.241: icmp_seq=0 ttl=64 time=0.393 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=2.511 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=5.810 ms (DUP!)
64 bytes from 192.168.1.255: icmp_seq=0 ttl=64 time=7.886 ms (DUP!)
64 bytes from 192.168.1.241: icmp_seq=1 ttl=64 time=0.312 ms

--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.312/3.382/7.886/3.010 ms

Pierwszą i ostatnią odpowiedzią prawie zawsze będzie lokalna maszyna. Te (DUP!)reakcje są z innych komputerów (choć ten przykład pokazuje również pewne urządzenie reaguje z adresem samej audycji, która nie jest strasznie przydatne).

Możesz także wypróbować adres emisji dla wszystkich:

% ping -i 5 -c 2 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=3.053 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=8.685 ms (DUP!)
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.319 ms

--- 255.255.255.255 ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.319/3.112/8.685/3.401 ms

Ten przykład pokazuje mniej cruft. Wszystkie (DUP!)s to inne maszyny, a lokalną maszynę można łatwo zidentyfikować jako 127.0.0.1.

Chris Johnsen
źródło
8

Wszystkie komputery Mac mają nazwy hostów, więc nie musisz znać adresów IP. Zamiast tego użyjesz tylko nazwy hosta.

Nazwy hostów zależą od nazwy komputera. Jeśli więc komputer ma nazwę „Jon's Mac”, nazwa hosta, której użyjesz, będzie przypominać „jons-mac.local”.

$ ssh jons-mac.local

Jeśli nie znasz jeszcze nazw hostów swoich komputerów, możesz znaleźć nazwy hostów komputerów w preferencjach udostępniania na tym komputerze lub możesz znaleźć nazwy hostów innych komputerów w sieci za pomocą polecenia dns-sd. To polecenie używa Bonjour do przeglądania usług sieciowych; znajdziesz tylko komputery, które faktycznie reklamują jakąś usługę sieciową (które w zasadzie są jedynymi, na których Ci zależy).

Jeśli chcesz połączyć się z komputerem obsługującym ssh, możesz znaleźć dostępne komputery za pomocą:

dns-sd -B _ssh._tcp .

Ogólnie można wyszukiwać hosty świadczące określone usługi przy użyciu nazw usług: http://www.dns-sd.org/ServiceTypes.html

Protokół Bonjour umożliwia także przeglądanie wszystkich usług, a nie tylko konkretnych. Możesz to zrobić, przeglądając specjalną usługę_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .

Pytanie dotyczy znalezienia innych komputerów w sieci z wiersza polecenia, ale można także przeglądać reklamowane usługi dns-sd w graficznym interfejsie użytkownika. Na przykład Terminal.app> Nowe połączenie zdalne ... wyświetla okno, w którym wyświetlane są reklamowane usługi ssh, sftp, ftp i telnet.

bames53
źródło
Jak szybko można się spodziewać dns-sd -B _ssh._tcp .uruchomienia tego polecenia ?
AJP,
1
@AJP Jeśli reklamowane są jakieś usługi ssh, powinny natychmiast zacząć zwracać wyniki. Ale jeśli przez „koniec” rozumiesz wyjście, to nie wyjście; polecenie uruchamia długotrwałe zapytanie, a dane wyjściowe są zmieniane w sposób ciągły, gdy usługi pojawiają się i znikają z sieci, dopóki ich nie zabijesz.
bames53
7

Możesz spróbować użyć dns-sd, aby wykonać zapytania Bonjour w sieci LAN.

Ignacio Vazquez-Abrams
źródło
3
Uwielbiam to, że ta odpowiedź jest specyficzna dla OS X i łączy się z bonjour, aby uniknąć uzyskania dodatkowych informacji o sieci, o które nie dbałbym (w kontekście tego pytania). Konkretne polecenie, które zadziałało na moje potrzeby, brzmiało:dns-sd -B _ssh._tcp .
stevenhaddox
6

Może to trochę przesada, ale możesz użyć nmap

Wagnarock
źródło
1
Chociaż może to odpowiedzieć na pytanie, lepszym rozwiązaniem byłoby wyjaśnienie, dlaczego tak się dzieje.
DavidPostill
4

Szybki liniowy interfejs CLI do przejścia przez / 24 ping podsieci dla każdego adresu IP. Szybko i trochę brudno, ale działa.

for (( x=1; x <= 254; x++ )); do ping -c 3 192.168.0.$x; done

Objaśnienie: Aby zmienić zakres, zmień x = 1 na x = 130 lub cokolwiek, od czego chcesz zacząć, a 254 do końca, powiedz 135.

for (( x=130; x <= 135; x++ ));

ping -c 3 wysyła trzy pingi. Aby zmienić liczbę pingów, zmień 3 na coś innego, a aby zmienić zakres adresów, zmień 192.168.0 na coś innego.

do ping -c 30 10.10.0.$x;
quinnr
źródło
1
możesz po prostu użyć fping, aby to zrobić:fping -ag 172.16.0.0/16
22ɾǝʞ
Dla mnie to nic, ale szybko ...
Max Williams,
To szybkie i brudne rozwiązanie. W chwili obecnej można go szybko wdrożyć przy braku odpowiednich narzędzi, takich jak nmap, i nie jest tak skuteczny, jak właściwe narzędzia, takie jak nmap. Pingowanie hostów może chwilę potrwać, gdy nie reaguje, a ponieważ nie jest to wielowątkowy, potrwa chwilę, gdy host nie odpowie. Plusem jest to, że nie wymaga niczego oprócz bash.
quinnr
2

Jeśli znasz nazwę innych komputerów w sieci LAN, najprostszym sposobem jest pingowanie ich:

$ ping foobar

Pinging foobar.lan [192.168.0.25] with 32 bytes of data:

Reply from 192.168.0.25: bytes=32 time<1ms TTL=64
Reply from 192.168.0.25: bytes=32 time<1ms TTL=64

Może to zależeć od lokalnego routera lub serwera DHCP. Jeśli goła nazwa hosta nie działa, spróbuj dodać .local (tj. Ping hostname.local ).

Oczywiście nie działa to dobrze w przypadku dużych sieci LAN lub osób ze słabymi wspomnieniami.

quack quixote
źródło
1

Jeśli używasz komputerów Mac (zakładając 10.5 lub nowszy), po prostu włącz VNC dla dostępu do pulpitu i użyj Flame.app.

http://husk.org/apps/flame/

To naprawdę miłe, małe narzędzie, które naprawdę szybko zapewnia dokładnie to, czego potrzebujesz. Jedyne, co musisz zrobić, to pójść dalej niż SSH.

tylerm
źródło
1

Dla Windowsa:

1) Napisz: dla / L% I in (1,1,254) DO ping -w 30 -n 1 168.29.0.% I Spowoduje to ping wszystkich adresów w sieci lokalnej

2) Następnie napisz: arp -a To da ci wszystkie adresy, które odpowiedziały

Chavdar
źródło
Oczywiście zależy to od adresu Twojej sieci lokalnej, w moim przypadku jest to 168.29.0.xxx. Twój może być jak 192.168.0.xxx
Chavdar
1
Twoja odpowiedź jest oparta na systemie Windows, podczas gdy OP stwierdził, że używa komputera Mac. Czy możesz edytować swoje pytanie, aby wziąć to pod uwagę, lub określić, czy Twoje rozwiązanie będzie działać na komputerze Mac.
Matthew Williams
Każdy użytkownik MAC ma siedzący system operacyjny Windows ... Nie możesz bez niego żyć ...: D
user2173353