네트워크에서 사용하지 않는 IP 주소를 찾고 싶습니다. 나는 nmap으로 가능하다고 생각합니다. 아무도 나에게 pls를 말할 수 있습니까?
노트 :
무료 IP 목록 만 있으면됩니다.
네트워크에서 사용하지 않는 IP 주소를 찾고 싶습니다. 나는 nmap으로 가능하다고 생각합니다. 아무도 나에게 pls를 말할 수 있습니까?
노트 :
무료 IP 목록 만 있으면됩니다.
답변:
빠른 스캐너는 ARP 스캔 사용하는 ARP를 네트워크의 "참조"다른 기계. 또한 MAC 주소를 반환하고 네트워크 어댑터 제조업체를 확인하려고합니다.
사용 예제 (교체 wlan0가 eth0필요한 경우) :
$ sudo arp-scan -I wlan0 192.168.1.0/24
Interface: wlan0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.1.10 00:90:f5:33:e2:f2 CLEVO CO.
192.168.1.254 00:14:7f:72:cd:05 Thomson Telecom Belgium
2 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.6: 256 hosts scanned in 1.406 seconds (182.08 hosts/sec). 2 responded
이 유틸리티는 전원이 켜진 시스템 만보고합니다. ping차단 될 수 있지만, arp-scan컴퓨터가 네트워크에있는 다른 컴퓨터와 상호 작용하는 것이 필요 이후 차단할 수 없습니다. IP가 사용되지 않도록하려면 라우터 (정적 / 동적 주소의 경우)와 DHCP 서버 (동적 주소의 경우)를 보는 것이 좋습니다.
-i매개 변수를 사용하여 패킷을 보내는 간격 ( 예 : -i 55ms)을 지연 시키십시오 .
sudo nmap -sP -PR 192.168.0.* (또는 네트워크가 무엇이든) 트릭을 수행합니다.
설치하려면을 사용하십시오 sudo apt-get install nmap.
출처 : serverfault.com .
방금 이것을 테스트하고 가려진 호스트를 포함한 매력처럼 작동합니다 -PR. 옵션 을 사용하려면 sudo를 추가해야합니다 .
sudo) 루트 입니다. 또한 호스트의 포트도 검색하므로 검색 속도가 느려 방화벽에 의해 차단되었을 수 있습니다.
나는 fping이 유용하다고 생각한다. 무엇보다도, 그것은 '살아있는'주소와 '연결할 수없는'주소와 목록의 범위를 핑합니다. fping은 기본적으로 설치되지 않습니다.
sudo apt-get install fping
간단한 접근 방식은 단순히 주소 범위에서 실행하는 것입니다.
fping -g 192.168.0.2 192.168.0.254 2>/dev/null
사용하지 않는 IP 목록을 생성하기 위해 조금 더 정교합니다.
fping -g 192.168.0.2 192.168.0.254 2>/dev/null | grep 'is unreachable' | cut -d ' ' -f 1 | sort -t '.' -k 4 -n
나는 그것이 최선의 해결책은 아니지만 당신이 원하는 것을한다고 생각합니다. 이 스크립트는 네트워크를 ping통해 실행 192.168.0.0/24되며 ARP 캐시에없는 경우 비활성 IP 목록을 반환합니다.
이전 솔루션에 비해 장점 :
root사용자 로 실행할 필요가 없습니다네트워크를 스캔하려면 <first IP> <last IP>매개 변수를 사용 하여 네트워크를 실행하십시오 .
#!/usr/bin/env python
from threading import Thread
import subprocess
from Queue import Queue
verbose = False
num_threads = 8
queue = Queue()
inactive_ips = [0 for i in range(256)]
lines = open("/proc/net/arp", "r").readlines()
arp_cache = [l.split()[0] for l in lines[1:] if l.split()[2] == "0x2"]
def ip_str_to_int(ip):
ip = ip.rstrip().split('.')
ipn = 0
while ip:
ipn = (ipn << 8) + int(ip.pop(0))
return ipn
def ip_int_to_str(ip):
ips = ''
for i in range(4):
ip, n = divmod(ip, 256)
ips = str(n) + '.' + ips
return ips[:-1] ## take out extra point
#wraps system ping command
def pinger(i, q):
while True:
ip_num = q.get()
ip = ip_int_to_str(ip_num)
if ip not in arp_cache:
ret = subprocess.call("ping -c 1 %s" % ip,
shell=True,
stdout=open('/dev/null', 'w'),
stderr=subprocess.STDOUT)
if ret != 0:
inactive_ips[ip_num % 256] = ip
q.task_done()
if __name__ == '__main__':
from optparse import OptionParser
usage = "usage: %prog [options] [first IP] [last IP]"
parser = OptionParser(usage=usage)
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="make lots of noise")
parser.add_option("-q", action="store_false", dest="verbose", help="print only IP adresses")
(options, args) = parser.parse_args()
verbose = options.verbose
first = ip_str_to_int(args[0] if len(args) > 0 else "192.168.0.1")
last = ip_str_to_int(args[1] if len(args) > 1 else "192.168.0.254")
if verbose:
print "Scanning inactive network addresses from %s to %s" % (
ip_int_to_str(first),
ip_int_to_str(last))
for i in range(num_threads):
worker = Thread(target=pinger, args=(i, queue))
worker.setDaemon(True)
worker.start()
for ip in range(first, last + 1):
queue.put(ip)
queue.join()
for ip in inactive_ips:
if ip:
print ip
downvote 후 업데이트
나는 nmap -PR 192.168.0.*나를 위해 일하지 않았기 때문에 그것을 썼다 :
Starting Nmap 5.21 ( http://nmap.org ) at 2011-10-06 15:34 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 0.03 seconds
업데이트 2
ARP 캐시와 관련된 모든 문제를 해결했습니다.
이것은 bash에서 올바르게해야합니다.
#!/bin/bash
#setting language variables for subshell making sure we grep for the right word
LC_ALL=C
LANG=C
# retrieve IP from user input
read -p "Input your network (example: 192.168.0): " my_net
for i in $(seq 1 254);
do
ip="$my_net.$i"
check="$(ping -c1 "$ip")"
if [ "$(grep "Unreachable" <<<"$check")" != "" ]
then
echo "$ip is unreachable"
fi
done
더 간단하다고 생각합니다
# my_net define my Net_ID
my_net=192.168.1.
for i in `seq 1 254`;
do
ip="$my_net$i"
ping -c2 $ip | grep "is unreachable" | cut -d" " -f1 &
done
"is unreachable" 하거나 당신이 그것을 당신을 grep -v time위해 잘 작동하도록 변경하면 살 수 있습니다