ฉันแค่ต้องการทราบที่อยู่ IP ที่ไม่ได้ใช้ในเครือข่าย ฉันคิดว่าเป็นไปได้ด้วย nmap ใครช่วยบอกฉันหน่อยได้ไหม?
บันทึก:
ฉันแค่ต้องการรายการ IP ฟรีเพียงอย่างเดียว
ฉันแค่ต้องการทราบที่อยู่ IP ที่ไม่ได้ใช้ในเครือข่าย ฉันคิดว่าเป็นไปได้ด้วย nmap ใครช่วยบอกฉันหน่อยได้ไหม?
บันทึก:
ฉันแค่ต้องการรายการ IP ฟรีเพียงอย่างเดียว
คำตอบ:
สแกนเนอร์ที่รวดเร็วคือarp-scanซึ่งใช้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 5
5 ms
sudo nmap -sP -PR 192.168.0.*
(หรือเครือข่ายของคุณคืออะไร) จะทำเคล็ดลับ
sudo apt-get install nmap
ในการติดตั้งใช้งาน
เพิ่งผ่านการทดสอบนี้ใช้งานได้อย่างมีเสน่ห์รวมถึงโฮสต์ที่ไม่ชัดเจนคุณต้องเพิ่ม sudo เพื่อให้สามารถใช้-PR
ตัวเลือกได้
sudo
) นอกจากนี้ยังอาจถูกบล็อกโดยไฟร์วอลล์เนื่องจากสแกนพอร์ตของโฮสต์ซึ่งทำให้การค้นหาช้าลง
ฉันพบว่า fping มีประโยชน์ เหนือสิ่งอื่นใดมันจะ ping ช่วงของที่อยู่และรายการที่ 'มีชีวิตอยู่' และ 'ไม่สามารถเข้าถึงได้' โดยค่าเริ่มต้น 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
เครือข่ายและส่งคืนรายการ IP ที่ไม่ใช้งานหากไม่มีในแคช ARP
ข้อดีเหนือโซลูชันก่อนหน้า:
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-cache
สิ่งนี้ควรทำอย่างถูกต้องในการทุบตี:
#!/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
อาจจะทำงานได้ดีสำหรับคุณ