Linux에서 LAN에있는 컴퓨터 목록 표시


62

나는 보안을 더 잘 다루려고 노력하는 웹 개발자입니다. 넷북과 같은 LAN에있는 모든 컴퓨터를 나열하는 방법을 찾으려고합니다 (Linux / Debian 기반 배포판). 나는 "arp -n"을 시도했지만 내 iPhone이 내 넷북과 동일한 Wi-Fi 라우터에 있고 그것이 나오지 않았기 때문에 완전한 목록이라고 생각하지 않습니다. 모두 동일한 게이트웨이를 공유하는 전체 머신 목록을 얻는 더 좋은 방법이 있습니까?


답변:


58

가져 nmap은 . The Matrix에서 사용되는 Trinity 프로그램이며 스캔하여 현재 사용중인 LAN에 연결된 모든 장치를 찾을 수 있습니다.

참조 안내서는 다음과 같습니다 .


16
승인. "sudo nmap -sL 123.123.123. *"는 내가 찾고있는 것 또는 -sL 대신 -sP입니다. 감사!
CaptSaltyJack

2
와 nmap을 설치sudo apt-get install nmap
saintali

1
나는 이것이 실제로 심각한 웹 사이트라고 생각했다. lol +1
user10089632

38

이것이 내가 사용하는 것, nmap 및 스캔하려는 네트워크의 CIDR 블록 표기법을 사용하는 주소입니다. 먼저 배포판과 함께 사전 설치되어 있지 않을 수도 있으므로 nmap을 설치해야합니다. 우분투에서 :

sudo apt-get install nmap

다음으로 ifconfig를 사용하여 네트워크 주소를 찾으십시오.

ifconfig

스캔하려는 인터페이스에 대한 ifconfig 출력 :

wlan1     Link encap:Ethernet  HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

CIDR 표기법으로 네트워크 주소를 확인하려면 inet addr 및 Mask를 사용하십시오 (CIDR here 참조) . 주소는:

192.168.1.0/24

-sP 매개 변수를 사용하여 nmap을 실행하십시오. 호스트는 온라인 상태인지 확인하는 것 이상을 스캔하지 않습니다.

sudo nmap -sP 192.168.1.0/24

nmap 출력은 다음과 같습니다.

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

nmap에 대한 추가 도움이 필요 하면 nmap 공식 문서를 참조 하거나 다음을 실행하십시오.

nmap --help 

2
nmap -sA 192.168.1.0/24 nmap 옵션 -sA은 옵션 과 마찬가지로 장치 이름, IP, mac 등을 포함하여 더 나은 가독성을 가진 유사한 설명 결과를 보여줍니다 -sP. 나는 개인적으로 가독성을 위해 -sA보다 -sA를 선호합니다.
Jayzcode

@Jayzcode 내 컴퓨터에서 -sA가 반환되지 않는 반면 -sP는 3.73 초 밖에 걸리지 않았습니다 (라우터, 내 PC 및 다른 PC 감지). 왜 그런지 알아?
로드리고

17

arp -nLAN에서 머신과 이미 대화 한 머신 만 표시합니다. 브로드 캐스트 및 모든 호스트 멀티 캐스트 주소를 ping하여 해당 목록을 더 잘 채울 수 있습니다.

"모두"브로드 캐스트 주소입니다. 대부분의 IP 스택은이 주소를 연결된 모든 서브넷의 서브넷 브로드 캐스트 주소로 변환합니다.

ping 255.255.255.255

현재 서브넷의 서브넷 브로드 캐스트 주소입니다. 따라서 당신이 192.168.1.0/24에 있다고 가정하면 :

ping 192.168.1.255

"모든 호스트"멀티 캐스트 주소 다른 IP 서브넷에 대해 구성된 호스트를 찾을 가능성이 높기 때문에이 것을 많이 좋아합니다.이 호스트는 동일한 이더넷 LAN에 연결됩니다.

ping 224.0.0.1

이 방법과 지금까지 다른 답변에서 언급 한 다른 방법은 현재 네트워크에서 IP 연결 가능한 호스트 만 찾습니다. 이것이 당신이 신경 써야 할 전부일 것입니다. 그러나 침입자는 IP를 통해 보이지 않고 네트워크를 스누핑하거나 악의적 인 일을 할 수 있습니다.


8

ip neigh그리고 hosts. nmap이 필요하지 않으며 sudo가 필요하지 않습니다 .

이를 바탕으로 Python 스크립트를 작성할 수 있습니다.

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

통해 다운로드

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(또는 단순히 arp... 전에는 그것을 보지 못했습니다)


또는 그냥ip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop

ip n짧게. 아마 더 낫다 ip n | grep REACHABLE.
Pablo A

4

기존 답변이 충분히 만족스럽지 않아 시도해 볼 것이라고 생각했습니다. 결국, FAQ는 링크 에 대한 컨텍스트 를 제공 할 것을 제안 합니다 .

nmap조금 혼란 스러우면 좋습니다. 여기 복사 할 수있는 로컬 네트워크 장치를 찾기 위해 실행하는 것이 있습니다. nmap -sP(나 nmap -sn)에 의해 스캔 . 와 같은 '호스트 발견'에 대한 다른 옵션이 있습니다 nmap -sL또는 nmap -Pn.

방법 # 1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

방법 # 2. 나는 이것이 효과가 있다는 것을 알고 있지만 이것이 올바른 방법인지 말할 수는 없다.

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

더 효과적인 방법이 있는지 기꺼이 알려 드리겠습니다. 그때까지 나는 이것을 고집하고 있습니다.


4

예를 들어 작은 리눅스 쉘 스크립트로 주어진 서브넷을 모두 핑 (ping) 할 수 있습니다.

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done

내 경우에는 모두에게 UP ip n이라고 말한 다음 모두에게 실패했다고 말하십시오.
Pablo A

3

헌트 는 네트워크를 통해 정보를 브로드 캐스트 할 때 시스템 목록을 작성할 수있는 명령 행 도구입니다. TCP, UDP, ICMP 및 ARP 데이터를 사용하여 네트워크에서 활성 MAC 주소 목록을 작성합니다. 유선으로 들으면서 작동하는 수동 도구입니다.


4
맨 페이지가 있다는 것을 알고 있지만 답변에서 예제를 보는 것이 유용합니다.
Ehtesh Choudhury

2

보다 간단한 연결된 장치 목록 :

nmap -sL 192.168.0.* | grep \(1

설명.

nmap -sL 192.168.0.* 하위 네트워크의 모든 IP를 나열하고 이름이있는 IP를 표시합니다.

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

모든 흥미로운 레코드는 괄호 (와 숫자로 시작하므로이를 1필터링합니다 | grep \(1(괄호를 이스케이프하려면 백 슬래시가 필요합니다)

Quirk
두 장치가 같은 이름을 가진 경우 마지막nmap 으로 라우터에 연결된 장치 만 표시합니다.


2

IP 주소 범위의 상태를 스캔하려면 간단하고 훌륭합니다.

sudo nmap -sn 192.168.1.2-20

어디:

         -sn: Ping Scan - disable port scan

노트 :

  • Nmap은 이전 버전에서, -sn로 알려진-sP

Mac OS X (BSD 기반) 에서이 작업을 수행했습니다. Linux 버전에 차이가 있는지 확실하지 않습니다.


1
훌륭합니다. sudo nmap -sP 192.168.178.0-255 만 입력하면됩니다. 이것은 내가있는 서브넷에서 스캔을 수행했습니다.
Leo Gerber

2

데비안 같은 OS에서 fping을 사용할 수 있습니다 sudo apt-get install fping.

fping 은 ping과 비슷하지만 여러 호스트를 ping 할 때 성능이 훨씬 뛰어납니다. -r 1 플래그는 한 라운드를 수행 할 수는 fping 알려줍니다. 2> 1 부분 그렙 출력을 필터링 할 수있다.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

다음과 같이 표시됩니다.

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

또한 MAC 공급 업체를 알 수 있는 흥미로운 nmap 플래그 가 있습니다 ( 알려진 경우). MAC 주소를 보려면 sudo 와 함께 사용하십시오 .

$ sudo nmap -sP 192.168.1.0/24

예를 들면 다음과 같습니다.

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds

1

1. 방송 중이며 nmap사용할 수없는 경우 대체 솔루션 :

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a. 또는 도메인 이름 서버에 문의하십시오 .

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. 어색하지 않고

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. 192.168.2.0/24 서브넷의 모든 핑 가능한 네트워크 장치를 병렬로 (실행 시간 단축)합니다. 그 후 arp모든 장치가 표시되어야합니다.

  2. 활성 또는 현재 연결을 확인하지는 않지만 로컬 도메인 서비스가 항목을 유지하는 모든 연결, 실제로는 오래된 연결을 나열합니다.

더 자세한 설명 :

  • seq 2541에서 254까지의 모든 숫자를 만들려면 (100에서 150까지의 모든 숫자의 경우 seq 100 150)
  • xargs호출 ping하고 "IP"( -iIP) seq를 stdin 의 uence 번호로 대체 하므로 192.168.2.IP가 첫 번째 seq번호 의 192.168.2.1로 변경되고 -P동시 ping프로세스 수가 xargs시작되어야 함을 지정합니다. 주소와 동일한 양 +1을 선택합니다 ( = 254) 관심이 있습니다.
  • pingxargs ( 192.168.2.IP)에 의해 수정 된 ip-address 와 ping once ( -c1); -i이 경우 인수에 대해 xargs에 지정된 것과 동일한 식별자를 사용해야합니다.IP
  • grep time= 불필요한 정보가 포함 된 모든 행을 제거하기 위해 왕복 시간 (= 응답)을 제공하는 답변에만 관심이 있습니다.
  • arp -a 유효한 이름 (ip) 쌍을 표시하려면

나는 이것을 pingall 명령 이라고 부르고 별칭을 통해 사용할 수있게했다 ~/.bashrc.

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.