Tôi chỉ muốn tìm ra Địa chỉ IP không sử dụng trên mạng. Tôi nghĩ rằng nó có thể với nmap. Có ai có thể nói cho tôi cách xin không?
Chú thích:
Tôi chỉ cần danh sách IP miễn phí một mình.
Tôi chỉ muốn tìm ra Địa chỉ IP không sử dụng trên mạng. Tôi nghĩ rằng nó có thể với nmap. Có ai có thể nói cho tôi cách xin không?
Chú thích:
Tôi chỉ cần danh sách IP miễn phí một mình.
Câu trả lời:
Một máy quét nhanh là arp-scan sử dụng ARP để "nhìn" các máy khác trên mạng. Nó cũng trả về địa chỉ MAC và cố gắng xác định nhà sản xuất bộ điều hợp mạng.
Ví dụ sử dụng (thay thế wlan0
bằng eth0
nếu cần):
$ 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
Lưu ý rằng tiện ích này chỉ báo cáo các máy được bật nguồn. ping
có thể bị chặn, nhưng arp-scan
không thể bị chặn vì cần thiết cho một máy tương tác với các máy khác trên mạng. Để chắc chắn rằng IP không được sử dụng, tốt hơn bạn nên xem bộ định tuyến của mình (đối với địa chỉ tĩnh / động) và máy chủ DHCP (đối với địa chỉ động).
-i
tham số, ví dụ -i 5
trong 5 ms.
sudo nmap -sP -PR 192.168.0.*
(hoặc bất kể mạng của bạn là gì) sẽ thực hiện thủ thuật.
Để cài đặt nó sử dụng sudo apt-get install nmap
.
Nguồn: serverfault.com .
Chỉ cần thử nghiệm điều này, hoạt động như một bùa mê bao gồm các máy chủ bị che khuất, bạn cần thêm sudo để có thể sử dụng -PR
tùy chọn.
sudo
). Hơn nữa, nó có thể bị chặn bởi tường lửa vì nó cũng quét các cổng của máy chủ cũng làm chậm quá trình tìm kiếm.
Tôi thấy fping hữu ích; trong số những thứ khác, nó sẽ ping một loạt địa chỉ và danh sách 'còn sống' và 'không thể truy cập'. fping không được cài đặt theo mặc định.
sudo apt-get install fping
Cách tiếp cận đơn giản là chỉ chạy nó trên một loạt các địa chỉ.
fping -g 192.168.0.2 192.168.0.254 2>/dev/null
Công phu hơn một chút, để tạo ra một danh sách các IP không sử dụng.
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
Tôi tin rằng nó không phải là giải pháp tốt nhất nhưng nó làm những gì bạn muốn. Tập lệnh này chạy ping
qua 192.168.0.0/24
mạng và trả về danh sách các IP không hoạt động nếu không có trong bộ đệm ARP.
Ưu điểm so với các giải pháp trước đây:
root
người dùngĐể quét mạng của bạn chạy nó với <first IP> <last IP>
các tham số.
#!/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
Cập nhật sau khi tải xuống
Tôi đã viết nó vì nmap -PR 192.168.0.*
không làm việc cho tôi:
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
Cập nhật 2
Đã sửa tất cả các sự cố với ARP-cache.
Điều này sẽ làm điều đó ngay trong 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
tôi nghĩ nó đơn giản hơn
# 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"
hoặc nếu bạn thay đổi nó grep -v time
có thể hoạt động tốt cho bạn