ฉันจะแสดงรายการ IP ทั้งหมดในเครือข่ายที่เชื่อมต่อผ่าน Terminal โดยเฉพาะได้อย่างไร


219

ใช้ Ubuntu 10.10 ฉันสงสัยว่ามีคำสั่งบรรทัดคำสั่งที่สามารถแสดงรายการ IP ทั้งหมดของอุปกรณ์ที่เชื่อมต่อกับเครือข่ายหรือไม่

ฉันจะใช้สิ่งนี้เพื่อแสดงรายการคอมพิวเตอร์ทั้งหมดที่เชื่อมต่อกับเครือข่ายในบ้านของฉัน เป็นการดีที่จะต้องมีบรรทัดคำสั่งเพราะฉันจะใช้มันจาก C ++

ความคิดใด ๆ



1
ซ้ำกันเพิ่มเติม: 1. การเดินทาง IPs ทั้งหมดของอุปกรณ์ที่เชื่อมต่อกับเราเตอร์เดียวกัน 2. แสดงรายการคอมพิวเตอร์บน LAN ใน Linux
Alexander Malakhov

คำตอบ:


243

ตรวจสอบคำสั่งarp-scan - คุณอาจต้องติดตั้งเช่น:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

และเพื่อให้รายละเอียดเพิ่มเติม:

sudo arp-scan --interface=eth0 --localnet

ที่ eth0 เป็นอุปกรณ์ของคุณ คุณสามารถค้นหาอุปกรณ์ของคุณด้วย:

ifconfig

สมบูรณ์แบบขอบคุณ ส่งคืนรูปแบบที่ฉันต้องการ
Christopher Gwilliams

1
ทำงานได้อย่างสมบูรณ์บน OSX เช่นกัน! ติดตั้งด้วย Brew และส่วนต่อประสานนั้นเป็น en0 แทนที่จะเป็น eth0 แต่ใช้งานได้ดี
nthonygreen

6
หากเชื่อมต่อเข้ากับเครือข่ายของคุณโดยใช้ใช้ WiFi แทนwlan0 eth0
Neil

3
คุณจะได้รับสิ่งนี้เพื่อแสดงชื่อโฮสต์และที่อยู่ IP หรือไม่
user1527227

2
เป็นที่น่าสังเกตว่านี่ไม่ได้ใช้แคช ARP: ทำการสแกนจริง ซึ่งแตกต่างจากการสแกน nmap ส่วนใหญ่สิ่งนี้ไม่สามารถข้ามขอบเขตของเลเยอร์ 3 ซึ่งเป็นสิ่งที่คุณต้องการในสถานการณ์นี้ (กล่าวอีกนัยหนึ่งมัน จำกัด เครือข่ายย่อยของคุณ)
Zenexer

112

ใช้ nmap ตัวอย่าง: nmap -sn 10.10.10.0/24แคช arp จะบอกเฉพาะผู้ที่คุณพยายามติดต่อเมื่อเร็ว ๆ นี้


2
คือ 10.10.10.0 IP ที่ฉันได้รับ 24 ในกรณีนี้คืออะไร? ขอบคุณ
kolonel

4
@ kolonel นั่นเป็นเพียงตัวอย่าง คุณควรแทนที่ด้วยเครือข่ายของคุณ 24 คือ "เครื่องหมายสแลช" ของซับเน็ตมาสก์ หมายถึงใช้ 24 บิตจากด้านซ้าย มันเท่ากับ 255.255.255.0
Keith

2
@ คุณทราบหรือไม่ว่าฉันจะค้นหาที่อยู่เครือข่ายของฉันเพื่อใช้งานได้อย่างไร หรือมันเป็นเพียงแค่ IP ของฉันที่มี 0/24 ในตอนท้าย?
TMH


20

ใน windows นี่จะเป็น " arp -a" ฉันเชื่อว่าสิ่งที่เทียบเท่าใน Linux จะเป็น " arp -e"

ข้อมูลนี้สามารถพบได้จากหน้าคนสำหรับ arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).

ดูเหมือนว่าจะใช้งานได้ (อาจต้องมีการเล่นอย่างที่ฉันเป็นบนเครือข่ายสาธารณะดังนั้นดูเหมือนว่าจะแสดงรายการเซิร์ฟเวอร์ทั้งหมดบนเครือข่ายเท่านั้น
Christopher Gwilliams

หากฉันอยู่ในเครือข่ายภายในบ้านจะแสดงรายการอุปกรณ์ที่เชื่อมต่อกับเราเตอร์ของฉันหรือไม่ ขอบคุณ!
Christopher Gwilliams

1
คำสั่งนั้นจะแสดงรายการอุปกรณ์ในโฮสต์แคช arp ปัจจุบันเท่านั้นและจะเป็นอุปกรณ์ที่โฮสต์ได้ติดต่อเมื่อเร็ว ๆ นี้เท่านั้น
Linker3000

ทั้งสองทำงานบน Linux แต่arp -aแสดงโฮสต์ (ทั้งหมด) ในรูปแบบทางเลือก (BSD) การทำงานของ Simpy arpนั้นเหมือนกับการใช้งานarp -ebeacuse ซึ่งเป็นค่าเริ่มต้น
simplegamer

15

หากเครือข่ายของคุณ192.168.0.0/24สร้างไฟล์เรียกทำงานด้วยรหัสต่อไปนี้ เปลี่ยนเป็น192.168.0เครือข่ายจริงของคุณ

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done

สวัสดี Anders ... เครือข่ายของผู้ใช้อาจไม่ได้เป็น 192.168.0.0/24; ฉันทำบันทึก การจัดรูปแบบของไซต์ไม่เหมือนกับ # !, ดังนั้นจึงปิดกั้นการจัดรูปแบบของข้อมูลโค้ด: เมื่อป้อนรหัสให้ใช้ปุ่มข้อความบล็อกหรือข้อความที่จัดรูปแบบไว้ล่วงหน้าและตรวจสอบคำตอบของคุณสำหรับการจัดรูปแบบที่เหมาะสมก่อนส่ง และช่องว่างอาจถูกปล้นได้
Nevin Williams

เช่นกันเมื่อจัดหาสคริปต์ที่จำเป็นต้องใส่ลงในไฟล์และทำให้สามารถเรียกใช้งานได้แทนที่จะตัดทิ้งแล้วอาจเป็นวิธีที่ดีที่สุดที่คุณจะระบุสิ่งนี้ อาจไม่ชัดเจนสำหรับบางสิ่งที่จำเป็นสำหรับการนำโซลูชันของคุณไปใช้
Nevin Williams

12
ในทางเทคนิคแล้วจะคืนโฮสต์ที่ตอบสนองต่อ ping เท่านั้น อาจมีโฮสต์ที่เชื่อมต่ออยู่ แต่ไม่ตอบกลับคำขอ ICMP echo เช่นกันหนึ่งสามารถออกอากาศหนึ่งแพ็คเก็ตไปยังเครือข่ายทั้งหมดโดยการระบุที่อยู่ออกอากาศซึ่งเป็นที่อยู่สุดท้ายในเครือข่าย IP: ping -c 1 -W 1 192.168.0.255 จะประสบความสำเร็จเช่นเดียวกับ for loop
Nevin Williams

@NevinWilliams (ต้องการ -b ลบออก -W เพื่อรออีก) ping -b -c 1 192.168.0.255ผล "ส่ง 1 แพ็คเก็ต, ได้รับ 0, สูญเสียแพ็กเก็ต 100%, เวลา 0 มิลลิวินาที"
Aquarius Power

13

ลองติดตั้งnmap( sudo apt-get install nmap) และพิมพ์การnmap 192.168.1.0/24แทนที่192.168.1ด้วยสามส่วนแรกของที่อยู่ IP ของคุณ (ดูวิธีใช้ip addr)

คุณยังสามารถได้รับแผนที่ของเครือข่ายที่แม่นยำน้อยลงเล็กน้อยโดยการเรียกใช้ping 192.168.1.255(การแทนที่อีกครั้ง192.168.1) ซึ่งควรจะออกpingทุกเครื่องในเครือข่าย แต่ในประสบการณ์ของฉันไม่สามารถทำงานได้อย่างถูกต้อง


ที่จริงแล้วไม่มีคำตอบใดที่ทำงานได้อย่างถูกต้องเสมอ IP ไม่ได้รับการออกแบบโดยคำนึงถึงความต้องการนี้และมีสิ่งต่างๆเช่น Private VLANs ซึ่งทำให้ไม่สามารถหาโฮสต์อื่น ๆ บน LAN เดียวกันได้
Ron Maupin

2

มาพร้อมกับสิ่งต่อไปนี้บน Nexus ที่ใช้tmuxเป็นarp-scanไม่ได้อยู่ใน repo แต่nmapมาติดตั้งไว้ล่วงหน้าแสดงเฉพาะที่อยู่ IP:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'

1

สำหรับรายการอุปกรณ์ที่เชื่อมต่อขนาดกะทัดรัดยิ่งขึ้น:

nmap -sL 192.168.0.* | grep \(1

คำอธิบาย

nmap -sL 192.168.0.* จะแสดงรายการ IP ทั้งหมดในเครือข่ายย่อยและทำเครื่องหมายที่มีชื่อ:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

เมื่อระเบียนที่น่าสนใจทั้งหมดเริ่มต้นด้วยวงเล็บ(และหลัก1เราจะทำการกรองด้วย| grep \(1(ต้องใช้เครื่องหมายทับขวาเพื่อหลีกเลี่ยงวงเล็บ)

Quirk
ระวังว่าหากอุปกรณ์สองเครื่องมีชื่อเหมือนกันnmapจะแสดงเฉพาะอุปกรณ์ที่เชื่อมต่อกับเราเตอร์ล่าสุดเท่านั้น


หากคุณมีคำตอบที่เหมือนกันสำหรับสองคำถามคุณควรพิจารณาการตั้งค่าสถานะคำถามซ้ำซ้อนแทนที่จะโพสต์คำตอบซ้ำ วิธีนั้นสามารถแบ่งปันความรู้ได้เมื่อคำถามที่คล้ายกันเชื่อมโยงกัน
Mokubai

1
@Mokubai คุณพูดถูกฉันเพิ่มความคิดเห็นลงใน OP นี่แสดงให้เห็นถึงปัญหาที่น่าสนใจ การค้นหาที่รวดเร็วค้นพบ 6 รายการซ้ำ (ลิงก์ Q และ 5 นี้) ในเว็บไซต์เครือข่าย 4 แห่ง (SU, ถาม Ubuntu, SF, Unix) แน่นอนว่ามีอีกมากมาย! ฉันจะจัดการสิ่งนี้ได้อย่างไร โดยหลักการแล้วโพสต์ทั้ง 6 โพสต์เหล่านี้ควรเชื่อมโยงไปยัง 5 โพสต์อื่น ๆ การเพิ่มลิงก์เหล่านี้ด้วยมืออย่างชัดเจนไม่ได้เพิ่มขนาด ดังนั้นสำหรับตอนนี้ฉันเชื่อมโยงกับโพสต์นี้ (upvoted มากที่สุด) ปัญหาอีกประการหนึ่งคือมันเป็นไปไม่ได้ที่จะทำเครื่องหมาย Q บน AskUbuntu เป็นสำเนาของ Q บน SU อืม ... น่าจะเป็นอย่างนี้มีการพูดคุยกันในเมตาดาต้าแล้วใช่ไหม
Alexander Malakhov

ใช้งานไม่ได้สำหรับฉันบน Centos 7 เพียงแค่แสดงที่อยู่ IP ที่เป็นไปได้ทั้งหมดในเครือข่ายที่ไม่มีชื่อ arp-scan ใช้งานได้สำหรับฉัน
Jeff

0

Ellaborating กับคำตอบของ Anders Larrson -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.