Ubuntu 10.10을 사용하여 네트워크에 연결된 장치의 모든 IP를 나열 할 수있는 명령 줄 명령이 있는지 궁금합니다.
예를 들어 홈 네트워크에 연결된 모든 컴퓨터를 나열하기 위해 이것을 사용합니다. 이상적으로는 C ++에서 실행할 때 명령 줄이어야합니다.
어떤 아이디어?
Ubuntu 10.10을 사용하여 네트워크에 연결된 장치의 모든 IP를 나열 할 수있는 명령 줄 명령이 있는지 궁금합니다.
예를 들어 홈 네트워크에 연결된 모든 컴퓨터를 나열하기 위해 이것을 사용합니다. 이상적으로는 C ++에서 실행할 때 명령 줄이어야합니다.
어떤 아이디어?
답변:
arp-scan 명령을 확인하십시오 -예를 들어 설치해야 할 것입니다.
sudo apt-get install arp-scan
http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html
그리고 더 자세히 설명하기 위해 :
sudo arp-scan --interface=eth0 --localnet
eth0은 장치입니다. 다음과 같은 장치를 찾을 수 있습니다.
ifconfig
wlan0
대신을 사용하십시오 eth0
.
nmap을 사용하십시오. 예 : nmap -sn 10.10.10.0/24
arp 캐시는 최근 연락을 시도한 사용자에게만 알려줍니다.
Windows에서 이것은 arp -a
" arp -e
"일 것입니다. "Linux에서와 같은 것이" "라고 생각합니다 .
이 정보는 arp 매뉴얼 페이지에서 찾을 수 있습니다.
arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
arp -a
대체 (BSD) 스타일로 모든 호스트를 표시합니다. Simpy 실행 arp
은 arp -e
기본 설정 이므로 실행과 동일 합니다.
네트워크가 192.168.0.0/24
인 경우 다음 코드를 사용하여 실행 파일을 만드십시오. 192.168.0
실제 네트워크로 변경하십시오 .
#!/bin/bash
for ip in 192.168.0.{1..254}; do
ping -c 1 -W 1 $ip | grep "64 bytes" &
done
ping -b -c 1 192.168.0.255
결과 "1 패킷 전송, 0 수신, 100 % 패킷 손실, 시간 0ms"
nmap
( sudo apt-get install nmap
)를 설치 하고 IP 주소의 처음 세 부분으로 nmap 192.168.1.0/24
대체 192.168.1
하십시오 (을 사용하여 찾으십시오 ip addr
).
네트워크의 모든 컴퓨터에 a 를 발행 해야 하지만 ping 192.168.1.255
(대체 192.168.1
) 를 실행하여 네트워크의 약간 덜 정확한 (내 경험상) 네트워크 맵을 얻을 수 있지만 내 경험상 항상 올바르게 작동하지는 않습니다.ping
보다 간단한 연결된 장치 목록 :
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
으로 라우터에 연결된 장치 만 표시합니다.
Anders Larrson의 답변에 대한 설명-
#!/bin/bash
function scan ()
{
for ip in $1.{1..254}; do
ping -c 1 -W 1 $ip &
done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}
if [ $1 ]; then
for baseip; do
scan $baseip
done
else
scan 192.168.1
fi