ในงานของฉันมีคอมพิวเตอร์จำนวนมากและฉันต้องการสร้างเรื่องตลก ฉันสามารถปิดคอมพิวเตอร์ผ่านเครือข่าย แต่การค้นหาที่อยู่ IP นั้นยากสำหรับฉัน
ฉันจะหาที่อยู่ IP ออนไลน์ทั้งหมดได้อย่างง่ายดายจาก 192.168.1.aa ถึง 192.168.1.zz ได้อย่างไร
ในงานของฉันมีคอมพิวเตอร์จำนวนมากและฉันต้องการสร้างเรื่องตลก ฉันสามารถปิดคอมพิวเตอร์ผ่านเครือข่าย แต่การค้นหาที่อยู่ IP นั้นยากสำหรับฉัน
ฉันจะหาที่อยู่ IP ออนไลน์ทั้งหมดได้อย่างง่ายดายจาก 192.168.1.aa ถึง 192.168.1.zz ได้อย่างไร
คำตอบ:
โดยทั่วไปแล้วnmap
ค่อนข้างมีประโยชน์ในการสแกนเครือข่ายอย่างรวดเร็ว
ในการติดตั้ง nmap ให้ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล:
sudo apt-get install nmap
เมื่อติดตั้งแอปพลิเคชันแล้วให้ป้อนคำสั่งต่อไปนี้:
nmap -sn 192.168.1.0/24
สิ่งนี้จะแสดงให้คุณเห็นว่าโฮสต์ใดตอบคำขอ ping บนเครือข่ายระหว่าง 192.168.1.0 ถึง 192.168.1.255
สำหรับ Nmap เวอร์ชันเก่าให้ใช้-sP
:
nmap -sP 192.168.1.0/24
สำหรับการอ้างอิงเพิ่มเติมดูหน้าต่อไปนี้:
มันเป็นเครื่องมือที่มีประโยชน์มากในการเรียนรู้
หากคอมพิวเตอร์ทุกเครื่องในเครือข่ายของคุณเป็น Ubuntu หรือการแจกจ่ายอื่น ๆ ที่ใช้งานavahi-daemon
( DNS-SD ) คุณสามารถรับรายการโดยละเอียด (ด้วยชื่อโฮสต์และที่อยู่ IP) โดยทำดังนี้
avahi-browse -rt _workstation._tcp
หากคุณต้องการทราบที่อยู่ IP ทั้งหมดที่ใช้ในเครือข่ายของคุณคุณสามารถใช้arp-scan
:
sudo arp-scan 192.168.1.0/24
sudo apt-get install arp-scan
ในขณะที่มันไม่ได้ติดตั้งโดยค่าเริ่มต้นคุณจะต้องติดตั้งด้วย arp-scan
ส่งแพ็คเก็ต ARP ไปยังเครือข่ายท้องถิ่นและแสดงการตอบสนองที่ได้รับดังนั้นมันจึงแสดงให้เห็นแม้กระทั่งโฮสต์ไฟร์วอลล์
arp-scan
ไม่พบอุปกรณ์ทั้งหมดที่เชื่อมโยงกับเครือข่ายไร้สายของฉัน ตัวอย่างเช่นตอนนี้sudo arp-scan 192.168.2.0/24
แสดง 2 ผลลัพธ์ (.1 และ. 1) ในขณะที่ nmap -sn 192.168.2.0/24
แสดงผลลัพธ์ 4 รายการ (.1, .2, .3 และ. 4) ดังนั้นดูเหมือนว่าnmap
จะแม่นยำมากขึ้น (ฉันรู้แน่นอนว่ามีอุปกรณ์ 4 ชิ้นเชื่อมต่อกับเครือข่าย) ทำไมนี้
nmap
จาก
arp-scan
เป็นสิ่งที่ดี!
หมายเหตุถึงผู้อ่าน : คำตอบดั้งเดิมได้รับการโพสต์เมื่อครู่ที่ผ่านมาและในช่วงเวลาที่ฉันเพิ่งเรียนรู้การเขียนสคริปต์เปลือก ดูเวอร์ชันที่ได้รับการเยี่ยมชมอีกครั้งด้านล่างเพื่อดูสคริปต์ใหม่และปรับปรุงที่ทำงานได้เร็วขึ้นมาก
nmap
จะเป็นตัวเลือกอันดับ 1 ของฉัน แต่ถ้าคุณไม่มีมัน วิธี DIY จะมีสคริปต์ ping ที่ผ่านแต่ละที่อยู่ IP ที่เป็นไปได้บนเครือข่ายด้วยตนเอง สิ่งที่เรามีที่นี่คือในขณะที่วนรอบที่เราตั้งหมายเลขสุดท้ายในที่อยู่ทำการ ping เดียวเงียบไปยังที่อยู่ตรวจสอบว่าคำสั่งประสบความสำเร็จหรือไม่ (และถ้ามันประสบความสำเร็จแล้วโฮสต์จะเห็นได้ชัด) และprintf
คำสั่ง วิธีที่รวดเร็วและสกปรกใช้เวลาประมาณ 10 นาทีในการเขียนแต่ทว่ารันไทม์อาจจะช้าไปหน่อย
#!/bin/sh
# set -x
NUM=1
while [ $NUM -lt 256 ];do
ping -q -c 1 192.168.0.$NUM > /dev/null
RESULT=$(echo $?)
if [ $RESULT -eq 0 ]; then
printf 192.168.0.$NUM"\n"
fi
NUM=$(expr $NUM + 1)
done
ฉันโพสต์คำตอบนี้ในเดือนสิงหาคมปี 2015 ตั้งแต่นั้นมาฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับการเขียนสคริปต์เชลล์และเมื่อฉันเห็นสคริปต์นี้ฉันคิดว่ามันเป็นความคิดที่ดีที่จะทบทวนคำตอบนี้เพื่อเพิ่มการปรับปรุงเล็กน้อย นี่คือความคิดบางอย่าง:
เห็นได้ชัดว่าสคริปต์ช้าและping
รอการตอบสนองจากโฮสต์ ตามค่าเริ่มต้นping
สำหรับสอง RTT ซึ่งอาจแตกต่างกันไปขึ้นอยู่กับความแออัดของเครือข่ายของคุณและเท่าที่ฉันเข้าใจโปรโตคอล TCP จะเพิ่มเวลารอเป็นสองเท่าในแต่ละครั้ง (อย่างน้อยก็ตามนี้ ) ดังนั้นเราสามารถบังคับping
ให้หมดเวลาด้วยการ-w 1
ตั้งค่าสถานะ เนื่องจากเรามีที่อยู่ 256 รายการและเราถือว่า 1 วินาทีสำหรับแต่ละที่อยู่สคริปต์จะใช้เวลาประมาณ 256/60 = 4.27 นาที
ทำคำสั่งแล้วจับสถานะทางออกด้วย$?
ไม่จำเป็นจริงๆ if ... then;...fi
สามารถดำเนินการเกี่ยวกับคำสั่งโดยตรง กล่าวอีกนัยหนึ่งก็เพียงพอแล้วที่จะทำสิ่งนี้:
if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
then
<some other code here>
fi
printf
คำสั่งสามารถเขียนใหม่เป็นดังนี้
printf "IP %s is up\n" 192.168.0."$NUM"
นี่เป็นการเปลี่ยนแปลงโวหารมากกว่า แต่ก็สอดคล้องกับวิธีการprintf
ทำงานและมีลักษณะเหมือนในภาษาอื่น ๆ มากมายพร้อมกับ"$NUM"
ตัวแปรข้อความ การอ้างถึงที่นี่ไม่จำเป็น - เนื่องจากเรากำลังทำการติดต่อกับตัวเลขเท่านั้นเราไม่จำเป็นต้องคาดการณ์ว่าจะแยกคำได้เนื่องจากมีช่องว่างในตัวแปร
การปรับปรุงประสิทธิภาพที่ดีขึ้นมากสามารถทำได้ถ้าเราวางไข่กระบวนการพื้นหลังหลาย ๆ การแก้ไขสคริปต์ด้านล่างทำสิ่งนั้นอย่างแน่นอน ฉันใส่ping
และ printf
ลงในฟังก์ชั่นpingf
(ใช่ชื่อซ้ำซากฉันรู้) ขณะนี้มียังเป็นหนึ่งเดียวฟังก์ชั่นที่ไม่วนลูปและเรียกmain
pingf
#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
then
printf "IP %s is up\n" 192.168.0."$1"
fi
}
main(){
NUM=1
while [ $NUM -lt 255 ];do
pingf "$NUM" &
NUM=$(expr "$NUM" + 1)
done
wait
}
main
มันใช้งานได้ดีขนาดไหน? ไม่เลวจริง ๆ ใช้เวลาไม่กี่วินาที
$ time ./ping_script.sh
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
0m02.50s real 0m00.01s user 0m00.12s system
Netdiscover สามารถเป็นคำตอบของคุณ
วิธีติดตั้งผ่านเทอร์มินัล:
sudo apt-get install netdiscover
ตัวอย่างการใช้งาน:
sudo netdiscover -r 192.168.1.0/24 -i wlan0
IP ที่มี MAC Addreses จะแสดงบนเครื่องของคุณ ดูภาพหน้าจอ
หวังว่าจะช่วยคุณ
*** buffer overflow detected ***: netdiscover terminated
fping
เป็นเครื่องมือที่ยอดเยี่ยมในการสแกนโฮสต์หลายแห่งบนเครือข่ายผ่าน ICMP หากไม่ได้ติดตั้งคุณสามารถติดตั้งได้โดย:
sudo apt-get install fping
fping
ส่งแพ็กเก็ต ICMP ECHO_REQUEST และทำเครื่องหมายโฮสต์เป็น Up หากได้รับ ECHO_RESPONSE จากโฮสต์
ตัวอย่างเช่นหากต้องการสแกนโฮสต์ของเครือข่ายย่อย192.168.1.0/24
คุณสามารถทำได้:
fping -g 192.168.1.0/24
สำหรับโฮสต์จำนวนหนึ่งเช่นจาก192.168.1.15
ถึง192.168.1.140
:
fping -g 192.168.1.15 192.168.1.140
fping
สามารถกำหนดค่าได้สูงเช่นจำนวนแพ็คเก็ตที่จะส่งเวลาในการรอการตอบสนองรูปแบบเอาต์พุต ฯลฯ
ตรวจสอบman fping
เพื่อรับแนวคิดเพิ่มเติม
angry ip scanner