วิธีที่รวดเร็วในการสแกนหาพอร์ตที่เปิดอยู่บนเครือข่ายท้องถิ่นตามรายการ


1

ฉันจะทราบได้อย่างรวดเร็วว่าพอร์ต 80 เปิด / รับฟังบนเซิร์ฟเวอร์ผ่านสคริปต์ทุบตีหรือไม่

โดยปกติในเวิร์กสเตชันทั้งหมดที่ daemon กำลังทำงาน แต่บางครั้งก็ล้มเหลว ฉันใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าที่อยู่ IP มีพอร์ตเปิดหรือไม่ ฉันต้องการที่จะทำเช่นนี้สำหรับทุกบรรทัดในไฟล์โดยไม่ต้องพิมพ์ด้วยตนเองทุกครั้ง

 nc -zw3 10.101.0.13 80 && echo "opened" || echo "closed"

ไฟล์รายการมีลักษณะเช่นนี้ที่ไหน 3333 และ 3334 เป็นสตริงหลังจาก $ip;

10.101.0.13; 3333
10.101.0.15; 3334
10.101.0.17; 4143
10.101.0.21; 1445
10.101.0.27; 2443
10.101.0.31; 2445
10.101.0.47; 3443
10.101.0.61; 3445

ฉันต้องแยกพอร์ตที่เปิดจากพอร์ตที่ปิดดังนั้นฉันจะมีรายการเซิร์ฟเวอร์ที่ล้มเหลวที่จะต้องแก้ไข

ฉันลองทำสิ่งนี้ไม่สำเร็จ:

while IFS=";" read ip port ; do nc -zw3 "$ip" "$port" && echo "$ip:$port => opened" || echo "$ip:$port =>  closed" ; done < list.txt

while IFS=";" read ip port ; do nc -zw3 "${ip}" "${port}" && echo "${ip}:${port} => opened" || echo "${ip}:${port} =>  closed" ; done < list.txt

ธงรอไม่พร้อมใช้งาน / จะไม่ทำงานตามที่คุณต้องการที่นี่สำหรับทุกรุ่น NC คุณลองใช้หนึ่งในนั้นได้ไหม nc -zw3 ในเชลล์ที่มีหนึ่งเปิดและปิดพอร์ตและดูว่ามันจะกลับมาจริง ๆ หลังจาก 3 วินาที?
BroSlow

ใช่ด้วยการเปิดหนึ่งฉันได้รับการตอบสนองภายใน 10 มิลลิวินาที Connection to localhost 80 port [tcp/http] succeeded! และด้วยสิ่งที่ไม่ดีภายใน 10 เสี้ยววินาทีเดียวกันฉันจะได้รับบรรทัดว่างเปล่า
Mikhael Djekson

สิ่งที่คุณอธิบายทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ทำไมคุณถึงบอกว่ามันใช้งานไม่ได้
terdon

คำตอบ:


1

นี่คือคำสั่ง Nmap ขั้นพื้นฐานและมีประสิทธิภาพที่สุดในการทำสิ่งที่คุณต้องการ (และไม่มีอะไรเพิ่มเติม):

#!/bin/sh
# Gather the IPs to scan for each port
perl -lanF\; -e'push @{$p{$F[1]}}, $F[0];END{$,=" ";while(($x,$y)=each%p){print $x,@$y}}' input.txt | while read port ips; do
  # Scan the appropriate port for each set of IPs
  nmap -Pn -n -oG - -p $port $ips |\
  # Put the open ones into open.txt and the closed/filtered into closed.txt
  awk 'OFS=":";$4~/^Ports:/{if(/open/){print $2,'$port' >> "open.txt"}else{print $2,'$port' >> "closed.txt"}}'
done

น่าเสียดายที่ Nmap ไม่มีวิธีการสแกนเฉพาะบางพอร์ตใน IP บางตัวและพอร์ตอื่น ๆ บน IP อื่น ๆ มิเช่นนั้นอาจจะง่ายกว่ามาก


1
#!/bin/bash
N=0
cat $1 | while read line
do
    N=$((N+1))
    nc -zw3 $( echo $line | tr -d ';' ) && echo -e "OPEN\t$( echo $line | sed 's/; /:/g' )" || echo -e "CLOSED\t$( echo $line | sed 's/; /:/g' )" 
done

การใช้งาน: ./script.sh สแกนไฟล์ที่ระบุและทดสอบว่า "$ ip; $ port" แต่ละรายการเปิดหรือปิด

หากคุณต้องการเรียงลำดับผลลัพธ์: ./script.sh | ประเภท

ไม่จำเป็นต้องติดตั้ง

ในฐานะหนึ่งบรรทัดที่คุณสามารถวางลงในเทอร์มินัลของคุณโดยไม่ต้องสร้างเชลล์สคริปต์:

N=0; cat FILENAME | while read line; do; N=$((N+1)); nc -zw3 $( echo $line | tr -d ';' ) && echo -e "OPEN\t$( echo $line | sed 's/; /:/g' )" || echo -e "CLOSED\t$( echo $line | sed 's/; /:/g' )"; done

1

สิ่งที่ง่ายที่สุดคือการติดตั้ง nmap จาก repos จากนั้นทำ:

   awk -F ";" '{print $1}' data | xargs -L 1 nmap -p 80

ที่ไหน ข้อมูล เป็นไฟล์ที่มีที่อยู่ IP ที่จะสแกน

แก้ไข:

หากเป็นจริงตามที่ @pabouk แนะนำด้านล่างว่าหมายเลขที่อยู่ IP ต่อไปนี้เป็นพอร์ตที่จะสแกนคุณสามารถทำการสแกนที่ต้องการได้ดังนี้:

   awk -F ";" '{print "nmap " $1 " -p" $2}' data | xargs -I % sh -c '%'

หากคุณต้องการสแกนทั้งพอร์ต 80 และพอร์ตอ่านจากไฟล์คุณสามารถทำได้ด้วยคำสั่งนี้:

   awk -F ";" '{print "nmap " $1 " -p80," $2}' data | xargs -I % sh -c '%'

ถ้า nmap คิดว่าจะสร้างเอาต์พุตมากเกินไปคำสั่งต่อไปนี้จะทำ:

   awk -F ";" '{print "nmap -oG - " $1 " -p80," $2}' data | xargs -I % sh -c '%' | grep Ports

คุณไม่สนใจหมายเลขพอร์ตจากไฟล์ข้อมูล
pabouk

ฉันเข้าใจว่าแต่ละบรรทัดของไฟล์มีคู่นี้ที่จะสแกน: ที่อยู่ IP; ท่าเรือ . ด้วย nmap สร้างเอาต์พุตจำนวนมาก (ในกรณีนี้ฟุ่มเฟือย) กับการรันทุกครั้ง
pabouk

มันยังสร้างขยะจำนวนมาก คุณสามารถผนวก: "| grep tcp | sort" (ไม่มีเครื่องหมายอัญประกาศ) เพื่อกำจัดขยะ (ส่วนใหญ่) ขยะและแม้กระทั่งเรียงลำดับผลลัพธ์ตามพอร์ต
ecube

ใช่, nmap -oG - ... | grep Ports: เป็นสิ่งที่ฉันทดสอบเมื่อไม่นานมานี้ :)
pabouk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.