명령 줄을 통해 네트워크에서 다른 컴퓨터 찾기


30

내 홈 네트워크에는 소수의 Mac이 있고 외부에서 그 중 하나에 만 쉘 액세스가 가능합니다. 다른 컴퓨터의 IP 주소를 어떻게 알 수 있습니까?

답변:


39

시도 arp -a컴퓨터의 현재 ARP 테이블을 볼 수 있습니다. 컴퓨터와 상호 작용 한 IP 주소 만 표시됩니다. 다음과 같은 출력 (네트워크에서 MAC 주소를 숨기려면 약간 흐리게 표시됨) :

$ 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]

어떤 컴퓨터에 대한 추가 정보가없는 경우 MAC 주소 조회를 통해 네트워크 카드 제조업체를 식별하여 조금 더 자세한 정보를 얻을 수 있습니다 .


12
이것을 올바르게 표시하는 데 거의 4 년이 걸렸습니다.
Jon Haddad

" arp -a컴퓨터와 상호 작용 한 IP 주소 만 표시됩니다." ? 브로드 캐스트 (192.168.110.255)를 먼저 핑하고 모든 장치에서 응답을 얻은 다음 arp를 사용하여 모든 장치를 상호 작용 / 핑 했으므로 전체 목록을 가져와야합니까?
Weishi Zeng

10

다른 모든 컴퓨터가 액세스 할 수있는 것과 동일한 브로드 캐스트 도메인에 있다고 가정하면 브로드 캐스트 주소를 ping하면 충분합니다. 잠들거나 핑에 응답하지 않도록 구성된 시스템이나 핑에 응답하지만 핑을 브로드 캐스트하지 않는 시스템은 찾지 않습니다.

% 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

첫 번째 및 마지막 응답은 거의 항상 로컬 시스템입니다. 그만큼(DUP!)(이 예는 정말 유용하지 않습니다 브로드 캐스트 주소 자체로 응답 일부 기계를 보여 불구하고) 응답은 다른 기계에서입니다.

올인원 브로드 캐스트 주소를 사용해 볼 수도 있습니다.

% 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

이 예는 덜 부스러기를 보여줍니다. 모든 (DUP!)머신은 다른 머신이며 로컬 머신은 127.0.0.1로 쉽게 식별됩니다.


8

Mac에는 모두 호스트 이름이 있으므로 IP 주소를 몰라도됩니다. 대신 호스트 이름 만 사용하면됩니다.

호스트 이름은 컴퓨터에 지정한 이름을 기반으로합니다. 따라서 컴퓨터 이름이 "Jon 's Mac"인 경우 사용할 호스트 이름은 "jons-mac.local"과 같습니다.

$ ssh jons-mac.local

컴퓨터의 호스트 이름을 모르면 해당 컴퓨터의 공유 환경 설정에서 컴퓨터의 호스트 이름을 찾거나 dns-sd 명령을 사용하여 네트워크에있는 다른 컴퓨터의 호스트 이름을 찾을 수 있습니다. 이 명령은 Bonjour를 사용하여 네트워크 서비스를 찾아 볼 수 있도록합니다. 실제로 일부 네트워크 서비스를 광고하는 컴퓨터 만 찾을 수 있습니다.

ssh를 제공하는 일부 컴퓨터에 연결하려면 다음을 사용하여 사용 가능한 컴퓨터를 찾으십시오.

dns-sd -B _ssh._tcp .

일반적으로 서비스 이름을 사용하여 특정 서비스를 제공하는 호스트를 검색 할 수 있습니다. http://www.dns-sd.org/ServiceTypes.html

Bonjour 프로토콜은 특정 서비스뿐만 아니라 모든 서비스 를 찾아 볼 수있는 기능도 제공합니다 . 당신은 특별한 서비스를 찾아서 이것을 할 수 있습니다_services._dns-sd._udp

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

명령 줄에서 네트워크의 다른 컴퓨터를 찾는 것에 대한 질문이지만 GUI에서 dns-sd 보급 서비스를 찾아 볼 수도 있습니다. 예를 들어 Terminal.app> New Remote Connection ...은 알려진 ssh, sftp, ftp 및 telnet 서비스를 보여주는 창을 표시합니다.


이 명령 dns-sd -B _ssh._tcp .을 얼마나 빨리 실행할 수 있습니까?
AJP

1
@AJP 광고중인 ssh 서비스가 있으면 즉시 결과를 반환해야합니다. 그러나 '마침'으로 종료를 의미하는 경우 종료되지 않습니다. 이 명령은 오래 지속되는 쿼리를 실행하고 서비스가 종료 될 때까지 네트워크에서 서비스가 나타나고 사라짐에 따라 지속적으로 변경 사항을 출력합니다.
bames53

7

dns-sdLAN에서 Bonjour 쿼리를 수행하기 위해 사용할 수 있습니다.


3
나는이 답변이 OS X에 특화되어 있고 관심이없는 추가 네트워크 세부 정보를 얻지 않기 위해 bonjour에 연결되는 것을 좋아합니다 (이 질문의 맥락에서). 내 필요에 맞는 구체적인 명령은 다음과 같습니다.dns-sd -B _ssh._tcp .
stevenhaddox

6

어쩌면 약간 과잉이지만 nmap을 사용할 수 있습니다


1
이것이 질문에 대한 답변이 될 수 있지만, 그 이유에 대한 설명을 제공 할 수 있다면 더 나은 답변이 될 것 입니다.
DavidPostill

4

각 IP 주소에 대해 / 24 서브넷 핑을 수행하는 빠른 CLI 하나의 라이너. 빠르고 더러워 지지만 작동합니다.

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

설명 : 범위를 변경하려면 x = 1을 x = 130 또는 시작하려는 항목으로 변경하고 254를 끝으로 변경하십시오 (135).

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

ping -c 3은 3 개의 핑을 보냅니다. 핑 수를 변경하려면 3을 다른 것으로 변경하고 주소 범위를 변경하려면 192.168.0을 다른 것으로 변경하십시오.

do ping -c 30 10.10.0.$x;

1
당신은 단순히 이것을하기 위해 fping을 사용할 수 있습니다 :fping -ag 172.16.0.0/16
ıɾuǝʞ

이것은 나를위한 빠른 것입니다.
Max Williams

빠르고 더러운 솔루션입니다. 마찬가지로 nmap과 같은 올바른 도구가 없으면 신속하게 구현할 수 있으며 nmap과 같은 올바른 도구만큼 성능이 떨어집니다. 핑 호스트는 응답하지 않으면 시간이 걸릴 수 있으며 멀티 스레드되지 않으므로 호스트가 응답하지 않으면 시간이 걸립니다. 플러스 측면에서는 배쉬 외에 아무것도 필요하지 않습니다.
quinnr

2

LAN에있는 다른 컴퓨터의 이름을 알고 있다면 가장 간단한 방법은 핑 (ping)하는 것입니다.

$ 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

로컬 라우터 또는 DHCP 서버에 따라 다를 수 있습니다. 베어 호스트 이름이 작동하지 않으면 .local을 추가하십시오 (예 : ping hostname.local ).

분명히 이것은 큰 LAN이나 기억력이 나쁜 사람들에게는 효과적이지 않습니다.


1

Mac을 사용하는 경우 (10.5 이상으로 가정) 데스크톱 액세스를 위해 VNC를 활성화하고 Flame.app을 사용하십시오.

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

정말 필요한 것을 정확하게 제공하는 정말 유용한 유틸리티입니다. 유일한 것은 SSH보다 더 멀리 가야한다는 것입니다.


1

Windows의 경우 :

1) 쓰기 : (1,1,254)에서 / L % I에 대해 DO ping -w 30 -n 1 168.29.0. % I 로컬 네트워크의 모든 주소를 ping합니다.

2) 그런 다음 다음을 작성하십시오. arp -a 응답 한 모든 주소를 제공합니다


물론 로컬 네트워크 주소에 따라 다릅니다. 내 경우에는 168.29.0.xxx입니다. 당신은 192.168.0.xxx와 같은 것일 수 있습니다
Chavdar

1
귀하의 답변은 Windows를 기반으로하며 OP는 Mac을 사용한다고 밝혔습니다. 솔루션이 Mac에서 작동 할 경우이를 고려하거나 설명하기 위해 질문을 편집 할 수 있습니까?
Matthew Williams

모든 MAC 사용자는 주변에 Windows OS를 가지고 있습니다 ... 당신은 그것 없이는 살 수 없습니다 ... : D
user2173353
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.