Linux를 사용하여 네트워크에서 사용하지 않는 IP 주소를 찾으려면 어떻게합니까?


28

네트워크에서 두 대의 컴퓨터 (A 및 B)에 액세스 할 수 있습니다. 둘 다 서브넷 마스크가 255.255.255.128 인 고정 IP 주소를 가지고 있습니다 ( DHCP 서버가 사용되지 않았 음을 확인 했습니다). 동일한 컴퓨터에 여러 개의 IP 주소를 구성하려고하므로 서브넷에서 이미 사용중인 모든 IP 주소를 알고 싶습니다.

에서 이전 질문 , 나는 시도 nmap -sP -PR 172.16.128.*같은 명령을 내 두 대의 컴퓨터 (A와 B)에 다른 결과를주기 때문에 나는 그것의 결과에 대한 회의적, 명령을하지만. A에서 결과는 A와 B 의 주소를 포함하여 이미 사용중인 8 개의 IP 주소 목록을 보여줍니다 .

Nmap done: 256 IP addresses (8 hosts up) scanned in 1.23 seconds

그러나 B에서는 결과가 다릅니다.

Nmap done: 256 IP addresses (0 hosts up) scanned in 0.00 seconds

B의 결과는 A의 IP 주소뿐만 아니라 자체 IP 주소도 표시하지 않습니다!

내가 여기서 뭘 잘못하고 있니? Red Hat Linux (RHEL)에서 내 컴퓨터가 속한 서브넷에서 사용중인 모든 IP 주소를 발견하는 가장 확실한 방법이 있습니까?

RHEL: 6.5
Nmap version: 5.51

9
누가 네트워크를 관리합니까? 호스트에 임의의 IP 주소를 할당 할 권한이 있습니까?
Roger Lipscombe

4
예, 허가가 있습니다. 그건 좋은 질문이야.
Vishal Sharma

11
정답을 얻는 유일한 방법은 네트워크 관리자에게 문의하는 것입니다. 장치가 꺼 지거나 재부팅되거나 응답하지 않을 수 있으므로 사용자가하는 모든 일이 부정확 할 수 있습니다.
Jon Bentley

7
Roger와 Jon의 의견을 완료하려면 네트워크의 IP가 DHCP없이 수동으로 할당 된 경우 모든 IP 할당이 기록되고 사람이있는 곳에 등록 소가 있어야합니다 (데이터베이스, Excel 시트 또는 오래된 종이 디렉토리) 네트워크를 관리하려면이 정보가 있어야합니다. 기술적 인 솔루션으로 다른 컴퓨터의 IP를 실수로 훔치지 않도록 보장 할 수는 없습니다 (다운 서버 또는 원격 사용자 랩톱으로 사용). 이 레지스터가 손실되거나 존재하지 않으면 전체 인벤토리가 필요합니다.
zakinster

쉘이 가능한 파일 이름으로 확장하려고하지 않도록 와일드 카드 IP 주소를 인용해야합니다. 예를 들어,nmap -sP -PR '172.16.128.*'
roaima

답변:


39

이더넷 LAN에서 올바르게 작동하는 장치는 거의 모든 트래픽을 무시할 수 있으므로 PING, 포트 스캔 등을 모두 신뢰할 수 없습니다. 그러나 장치는 ARP 요청 을 무시할 수 없습니다 . 로컬 네트워크를 검색하도록 지정하면 원격 주소에 연결 한 다음 ARP 캐시를 찾는 것이 가장 취약한 방법입니다.

다음은 간단한 비 필터링 장치입니다 (즉, 일부 클래스의 IP 트래픽을 무시하도록 구성되지 않은 장치).

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=0.351 ms
[...]
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.1
? (192.168.3.1) at b8:27:eb:05:f5:71 [ether] on p1p1

다음은 필터링 장치입니다 (하나 iptables모든 트래픽 을 무시 하도록 한 줄로 구성됨 ).

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.31
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.31
? (192.168.3.31) at b8:27:eb:02:e4:46 [ether] on p1p1

아래에있는 장치가 있습니다. MAC 주소 부족에주의하십시오.

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.241
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.241
? (192.168.3.241) at <incomplete> on p1p1

이 방법은 빠질 수 없습니다. 한 가지 이유로 꺼져있는 장치가 누락되었지만 아직 시도한 것 중 가장 두려운 방법입니다.

편집 : Eric Duminil, 예. 로컬 네트워크에서만 작동합니다. 단락 1을 참조하십시오.

Vishal의 방법은 기능적으로 동일합니다. Leo의 답변에 인용 된 텍스트는 nmap다음과 같습니다.

권한있는 사용자가 로컬 이더넷 네트워크에서 대상을 검색하려고하면 ARP 요청이 --send-ip지정 되지 않은 한 사용 됩니다.

그의 방법은 타이핑이 덜 필요합니다. 광산은 특권없이 행해질 수 있으며 실제로 무슨 일이 일어나고 있는지 더 잘 이해할 수 있습니다 . 그러나 두 경우 모두 와이어에서 동일한 작업이 수행됩니다.


2
이것은 동일한 로컬 네트워크의 장치에서만 작동합니까? 나는 내 서버에서 그것을 시도했는데, 핑 요청은 그 사이 어딘가에 떨어져 있고 관련 줄을 찾을 수 없습니다 arp.
Eric Duminil

답변 주셔서 감사합니다. 방금 당신의 방법이 @Leo의 방법과 어떻게 비교되는지 알고 싶습니까? 어떤 식 으로든 그것보다 낫습니다 (그렇지 않으면 하나의 명령을 사용하는 것이 더 쉽기 때문에).
Vishal Sharma

2
@VishalSharma, EricDuminil : 위의 편집을 참조하십시오.
MadHatter는 Monica

분명히 말하면 @Leo의 방법은 특권 사용자가 사용하는 경우에만 귀하의 것과 유사하므로 소외 계층 사용자가 사용하는 경우 결과가 완전하지 않거나 정확하지 않습니다. 또한 권한있는 사용자 란 sudo 액세스 권한이있는 사용자를 의미합니까?
Vishal Sharma

1
@VishalSharma 귀하의 의견의 첫 부분은 정확합니다. 권한이있는 사용자 는 아래에서 sudo -u root(일부 단축 sudo) 작업을 수행 할 뿐 아니라 루트로 로그인했거나 완료 /bin/su했으므로 포괄적 인 용어를 사용합니다.
MadHatter는 Monica를 지원합니다.

20

장치는 ARP 요청을 무시할 수 없으므로라는 도구를 사용하고 싶습니다 arp-scan. 대부분의 리포지토리에서 사용할 수 있습니다.

--localnet스위치 와 함께 명령을 실행하면 전체 내부 네트워크에 대한 개요가 표시됩니다.

sudo arp-scan --localnet

네트워크의 모든 IP 및 MAC 주소 목록을 제공합니다. 스캔 할 네트워크 범위를 지정할 수도 있습니다.

sudo arp-scan 172.16.128.0/25

여러 네트워크 인터페이스가 구성되어있는 경우에 당신은 당신이 스위치를 사용하려는 하나를 지정할 수 있습니다 -I.

sudo arp-scan -I eth0 172.16.128.0/25

가능한 스위치에 대한 자세한 정보는 https://linux.die.net/man/1/arp-scan 에서 또는를 실행하여 찾을 수 있습니다 man arp-scan.


유망한 도구처럼 보이지만 RHEL 6.5와 함께 제공되지 않습니다 (제 경우에는 없어야합니다).
Vishal Sharma

@VishalSharma 불행합니다. CentOS에서 사용할 수 있으므로 RHEL에서도 사용할 수 있다고 생각했을 것입니다.
Thorchy

4
Fedora의 Enterprise Linux 용 추가 패키지 인 EPEL에 있습니다.
mattdm

LaBrea가 실행 중이면 작동하지 않습니다.
joshudson

@joshudson LaBrea가 실행 중일 때 도구 / 소프트웨어가 네트워크에서 사용하지 않는 IP 주소를 검색하는 것이 불가능하다는 것을 확신합니다.
Thorchy

11

Red Hat 6.5에서 어떤 버전의 nmap을 실행하고 있는지 모르겠지만 최근 릴리즈의 경우 올바른 (그리고 더 빠른) 방법은 다음과 같습니다.

nmap -sn -n 172.16.128.0/25

네트워크의 모든 호스트가 표시되므로 해당 서브넷의 다른 IP를 사용할 수 있어야합니다.

편집 및 참고 : 언급 한 서브넷은 255.255.255.128이지만 출력을 254 개의 호스트로 표시합니다. 내가 빠진 것이 아니라면 / 25 마스크와 126 개의 호스트가 있어야합니다. / 24를 스캔하려면 위의 명령을 변경하여 254 개의 호스트를 모두 쿼리하십시오.

nmap 책에서 -sP중단되어 다음으로 대체되었습니다 -sn.

-sn (포트 스캔 없음)

이 옵션은 Nmap에게 호스트 감지 후 포트 스캔을하지 말라고 지시하고 호스트 감지 프로브에 응답 한 사용 가능한 호스트 만 인쇄합니다. 이것을 "핑 스캔"이라고도하지만 traceroute 및 NSE ​​호스트 스크립트를 실행하도록 요청할 수도 있습니다. 이것은 기본적으로 목록 스캔보다 한 단계 더 중요하며 종종 같은 목적으로 사용될 수 있습니다. 그것은 많은 관심을 끌지 않고 대상 네트워크의 가벼운 정찰을 허용합니다. 얼마나 많은 호스트가 작동 중인지 알면 공격자가 모든 단일 IP 및 호스트 이름의 목록 검색에서 제공하는 목록보다 더 가치가 있습니다.

시스템 관리자는 종종이 옵션도 유용하다고 생각합니다. 네트워크에서 사용 가능한 시스템을 계산하거나 서버 가용성을 모니터링하는 데 쉽게 사용할 수 있습니다. 이것을 종종 핑 스윕이라고하며 많은 호스트가 브로드 캐스트 쿼리에 응답하지 않기 때문에 브로드 캐스트 주소를 핑하는 것보다 더 안정적입니다.

-sn으로 수행 된 기본 호스트 검색은 ICMP 에코 요청, 포트 443에 대한 TCP SYN, 포트 80에 대한 TCP ACK 및 기본적으로 ICMP 타임 스탬프 요청으로 구성됩니다. 권한이없는 사용자가 실행하면 SYN 패킷 만 (연결 호출을 사용하여) 대상의 포트 80 및 443으로 전송됩니다. 권한있는 사용자가 로컬 이더넷 네트워크에서 대상을 검색하려고하면 --send-ip를 지정하지 않으면 ARP 요청이 사용됩니다. 유연성을 높이기 위해 -sn 옵션을 감지 프로브 유형 (-Pn을 제외한 -P * 옵션)과 결합 할 수 있습니다. 해당 프로브 유형 및 포트 번호 옵션이 사용되면 기본 프로브가 재정의됩니다. Nmap을 실행하는 소스 호스트와 대상 네트워크 사이에 엄격한 방화벽이있는 경우 이러한 고급 기술을 사용하는 것이 좋습니다.

Nmap의 이전 릴리스에서는 -sn을 -sP라고했습니다.

-n클라이언트 (빠른 스캔한다)의 DNS 해상도를 방지하는 것입니다 :

-n (DNS 확인 없음)

찾은 활성 IP 주소에서 DNS 확인을 역방향으로 수행하지 않도록 Nmap에 지시합니다. Nmap의 내장 병렬 스텁 리졸버를 사용하더라도 DNS 속도가 느려질 수 있으므로이 옵션은 스캔 시간을 단축시킬 수 있습니다.

다른 조합을 사용하여 스캔 또는 서비스를 심화시킬 수 있지만 호스트가 자신을 마스킹하거나 모든 것을 삭제하지 않는 한 찾고자하는 것만으로 충분합니다.

출처 : https://nmap.org/book/man-host-discovery.html


위에서 언급 한 출력은 nmap -sP -PR 172.16.128. * 명령의 결과이므로 254 개의 호스트를 검사합니다.
Vishal Sharma

필자의 경우 네트워크 ID는 172.16.128.128이므로 제안한 명령을 수정해야했습니다. nmap -sn -n 172.16.128.128/25를 사용했습니다.
Vishal Sharma

네트워크 ID의 의미가 확실하지 않지만 장치에 해당 주소가 있고 서브넷에서 254 개의 호스트를 모두 스캔하려면 nmap -sn -n 172.16.128.1/24대신 위의 답변에서 언급 한대로 255.255를 스캔해야합니다. 255.0 마스크)
Leo

네트워크 ID는 IP_Address와 서브넷 마스크의 '논리적 And'를 수행하여 얻은 문자열을 의미했습니다.
Vishal Sharma

내가 참조. 내가 게시 한 nmap 명령이 귀하의 질문에 대답합니까? 두 장치 모두 동일한 주소를 나열하고 있습니까?
Leo

8

1 부-

이 도구는 지정된 네트워크 범위의 모든 것을 핑하고 ICMP를 통해 응답하는 것을 보여줍니다.

root@thionite:~# fping -a -g 10.28.1.0/24
10.28.1.1
10.28.1.2
10.28.1.3
10.28.1.4
10.28.1.5
10.28.1.12.....

2 부 -ARP

fping이 LAN의 모든 내용과 대화했기 때문에 시스템의 ARP 테이블에 항목이 추가되었습니다. arp 테이블이 이전 항목을 비우기 때문에 몇 분 내에이를 읽으십시오.

root@thionite:~# arp -a | grep -v incomplete
? (10.28.1.1) at 00:0d:b9:35:29:c4 [ether] on eth0
? (10.28.1.2) at 68:05:ca:10:53:5f [ether] on eth0
? (10.28.1.3) at d2:f1:6e:54:05:22 [ether] on eth0
? (10.28.1.4) at 00:1a:4d:26:85:ee [ether] on eth0
? (10.28.1.5) at 6e:a6:e5:78:da:ca [ether] on eth0
? (10.28.1.12) at 3c:4a:92:76:85:d8 [ether] on eth0

또한 ARP 테이블은 최대 크기를 가지며 커널은 이전 및 낮은 사용량 항목을 제거합니다.

모두 함께

 fping -a -g 10.28.1.0/24 && arp -a | grep -v incomplete > arp.txt

그런 다음 여가에 arp.txt를 찾아보십시오.


5

IPv6

IPv4가 유일한 옵션이라고 가정하지 마십시오. ISP가 V6 연결을 제공하지 않더라도 많은 최신 운영 체제가 IPv6을 잘 처리합니다.

IPv6 또는 다른 프로토콜로만 접근 가능한 장치가있을 수도 있습니다.

https://en.wikipedia.org/wiki/Multicast_address#IPv6에 기록 된 편리한 멀티 캐스트 주소 가 많이 있지만 흥미로운 것은 ff02 :: 1입니다.

root@thionite:~# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::4261:86ff:fec4:cbaa%eth0 eth0: 56 data bytes
64 bytes from fe80::4261:86ff:fec4:cbaa%eth0: icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from fe80::21a:4dff:fe26:85ee%eth0: icmp_seq=1 ttl=64 time=0.215 ms (DUP!)
64 bytes from fe80::6a05:caff:fe10:535f%eth0: icmp_seq=1 ttl=64 time=0.233 ms (DUP!)
64 bytes from fe80::226:55ff:feda:299c%eth0: icmp_seq=1 ttl=64 time=0.334 ms (DUP!)
64 bytes from fe80::20d:b9ff:fe35:29c4%eth0: icmp_seq=1 ttl=64 time=0.501 ms (DUP!)
64 bytes from fe80::21e:c2ff:fe13:36bf%eth0: icmp_seq=1 ttl=64 time=0.512 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=0.518 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=0.757 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=0.772 ms (DUP!)
64 bytes from fe80::60cc:69ff:fe4f:7db0%eth0: icmp_seq=1 ttl=64 time=0.992 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe32:3232%eth0: icmp_seq=1 ttl=64 time=1.00 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe30:3030%eth0: icmp_seq=1 ttl=64 time=1.24 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe31:3131%eth0: icmp_seq=1 ttl=64 time=1.34 ms (DUP!)
64 bytes from fe80::6ca6:e5ff:fe78:daca%eth0: icmp_seq=1 ttl=64 time=2.35 ms (DUP!)
64 bytes from fe80::b639:d6ff:feab:1000%eth0: icmp_seq=1 ttl=64 time=7.04 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=8.02 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=8.03 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=8.06 ms (DUP!)
64 bytes from fe80::212:12ff:fef7:8044%eth0: icmp_seq=1 ttl=64 time=8.24 ms (DUP!)
64 bytes from fe80::8edc:d4ff:fef2:67e0%eth0: icmp_seq=1 ttl=64 time=18.3 ms (DUP!)
64 bytes from fe80::21e:c2ff:fea9:6d71%eth0: icmp_seq=1 ttl=64 time=295 ms (DUP!)
...repeats

3

잘못된 대답은 브로드 캐스트 주소를

root@thionite:~# ping -b 10.28.255.255
WARNING: pinging broadcast address
PING 10.28.255.255 (10.28.255.255) 56(84) bytes of data.
64 bytes from 10.28.2.7: icmp_seq=1 ttl=64 time=0.220 ms
64 bytes from 10.28.3.12: icmp_seq=1 ttl=255 time=0.594 ms (DUP!)
64 bytes from 10.28.9.4: icmp_seq=1 ttl=64 time=1.03 ms (DUP!)
64 bytes from 10.28.1.151: icmp_seq=1 ttl=255 time=1.04 ms (DUP!)
64 bytes from 10.28.3.13: icmp_seq=1 ttl=255 time=2.22 ms (DUP!)
64 bytes from 10.28.3.11: icmp_seq=1 ttl=255 time=2.43 ms (DUP!)

해당 네트워크에는 / 16 넷 마스크를 가진 ~ 50 개의 IP 주소가 있으며 7 개만 응답했습니다. 따라서 이것은 좋은 해결책이 아닙니다.


1
왜 다른 답변입니까? 게시물을 편집 할 수 있습니다
데이지

3
@daisy는 다른 답변이기 때문에. 하나의 모 놀리 식 답변은 좋을 수 있지만 한 부분으로 억제됩니다. 별도의 답변을 통해 위 / 아래 투표 메커니즘이 제대로 작동 할 수 있습니다. 이 답변은 실제로 완전성에 대한 것일뿐 실제로는 그다지 유용하지 않습니다.
Criggie

1
핑 테스트는 장치가 핑에 응답하도록 구성되어 있는지 여부입니다.
Rob Moir

@RobMoir true-이것의 주요 포인트는 브로드 캐스트 주소가 존재하고 그것이 IPv4로 설계되었다는 것입니다.
Criggie

3

MadHatter의 답변 외에도 네트워크 패킷을 먼저 보내지 않고도 arp 조회를 수행하는 도구가 있습니다 : arping .

두 가지 구현이있는 것 같습니다.

귀하의 목적을 위해 Linux 배포판에서 패키지를 가져 오겠습니다. 차이점은 아마도 세부 사항 일뿐입니다.


1

공룡이 지구를 돌아 다닐 때, 프로토 머 저는 arpwatch를 사용했습니다 .

arpwatch는 컴퓨터 네트워크에서 주소 확인 프로토콜 트래픽을 모니터링하기위한 컴퓨터 소프트웨어 도구입니다. [1] 페어링이 네트워크에 나타날 때 타임 스탬프와 함께 MAC 주소와 관찰 된 IP 주소 쌍의 로그를 생성합니다. 페어링이 변경되거나 추가 될 때 관리자에게 이메일을 보내는 옵션도 있습니다.

arpwatch 매뉴얼 페이지


0

스위치에 로그인하고 show mac-address 제조업체 또는 모델에 따라 유사한 명령을 실행하십시오. 이렇게하면 활성 장치의 모든 MAC 주소가 표시됩니다 (스위치 자체 제외). 다른 응답에서 핑 또는 다른 방법으로 찾은 MAC 중에서 이러한 MAC 중 하나가 발생하지 않으면 어떤 장치인지 추가로 조사 할 수 있습니다. IP를 말하지 않거나 다른 VLAN에 속하기 때문에 중요하지 않을 수도 있지만 적어도 다른 프로브가 정확한지 여부를 대략적으로 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.