มีวิธีสแกน IP ฟรีบนเครือข่ายหรือไม่? ฉันใช้nmap -sP 192.168.1.0/24
แต่นี่แสดงให้เห็นว่าโฮสต์นั้นจริง
มีวิธีสแกน IP ฟรีบนเครือข่ายหรือไม่? ฉันใช้nmap -sP 192.168.1.0/24
แต่นี่แสดงให้เห็นว่าโฮสต์นั้นจริง
คำตอบ:
การใช้ Nmap เช่นนี้เป็นวิธีที่แม่นยำในการทำสิ่งที่คุณถามโดยมีเงื่อนไขว่าบางอย่างเป็นจริง:
ในการรับที่อยู่ "ที่มีอยู่" คุณจะต้องรับรายการที่อยู่ที่ Nmap รายงานว่า "ไม่ทำงาน" คุณสามารถทำได้ด้วยคำสั่ง awk ง่าย ๆ :
sudo nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'
สรุปตัวเลือก Nmap ที่ใช้:
-v
ตัวเลือก Nmap จะพิมพ์ที่อยู่ที่พบว่าเป็น "ลง" นอกเหนือจากที่อยู่ "ขึ้น"-sP
ฉัน-sn
หมายถึง "ข้ามการสแกนพอร์ต" แทนการสะกดPing "ที่ทำให้เข้าใจผิด (เนื่องจากการสแกน Ping") (เนื่องจากขั้นตอนการค้นพบโฮสต์ไม่ได้แปลว่า ICMP Echo scan หรือ Ping )-n
ตัวเลือกข้ามการค้นหา DNS ย้อนกลับซึ่งซื้อคุณบิตของเวลาเพราะคุณจะไม่สนใจในชื่อ แต่เพียงที่อยู่ IP-oG
ตัวเลือกบอก Nmap เพื่อส่งออกgrepableรูปแบบซึ่งเป็นเรื่องง่ายสำหรับ awk กับกระบวนการ อาร์กิวเมนต์ " -
" บอกให้ส่งเอาต์พุตนี้ไปยัง stdoutคำสั่ง awk จะค้นหา "สถานะ: ลง" แล้วพิมพ์ฟิลด์ที่สองที่มีที่อยู่ IP
แน่นอนถ้าคุณเข้าถึงการกำหนดค่าการทำงานของสวิตช์หรือสัญญาเช่าของเซิร์ฟเวอร์ DHCP คุณจะได้รับคำตอบนี้มากขึ้นโดยไม่ได้รับอนุญาตโดยไม่ต้องทำการสแกนที่สามารถกำหนดสัญญาณเตือนความปลอดภัยได้
ไม่แน่ใจเกี่ยวกับ n-map แต่ใคร ๆ ก็พอจะสันนิษฐานได้ว่าถ้าคุณเขียนสคริปต์ ping ที่ส่ง 1 ping ไปยังที่อยู่ที่โฮสต์ใด ๆ ที่กลับมาพร้อมกับ "ปลายทางไม่สามารถเข้าถึงได้" และไม่มีอะไรว่าง ถูกครอบครอง แต่ไม่ตอบสนองต่อการ ping ความแตกต่างระหว่างคำตอบทั้งสองคือ "ปลายทางไม่สามารถเข้าถึงได้" ไม่ได้รับการตอบสนองต่อคำขอ ARP "การร้องขอหมดเวลา" หมายถึงบางสิ่งที่ตอบสนองต่อคำขอ ARP แต่ไม่ใช่แพ็คเก็ต ICMP
นี่คือสิ่งเดียวกันใน PowerShell ....
((nmap -v -sn -n 10.208.2.0/24 -oG - ) -match "Status\:\sDown") | foreach {($_).Split(" ")[1]}
นี่เป็นอีกแรงบันดาลใจจาก Anders Larsson
สำหรับ ip ใน 172.18.5 {129..254}; ทำ {ping -c 1 -W 1 $ ip; } &> / dev / null || echo $ ip & เสร็จสิ้น | ประเภท
ซึ่งหมายความว่า: "ลอง ping Ips ทั้งหมดที่อยู่ในช่วงถ้า" ping "พิมพ์ IP นั้นไม่สำเร็จ"
ถ้าคุณทำ
nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'
ทำงานได้เร็ว แต่ฉันสังเกตว่ามีบางโฮสต์รายงานว่า "ลง" เป็น "ขึ้น" จริง ๆ แล้ว