2011-02-04 162 views
2

嗨我正在研究一个小型bash脚本,它将每隔5分钟扫描一次局域网,并获取主机,然后获取其MAC地址。获取本地网络中的现场主机MAC地址

到目前为止,我有这样的:

nmap -sP -n -oG - 10.0.0.1-20 | grep "Up" | awk '{print $2}' 

这给了我的IP地址。现在,我必须这样做

arp -an | grep 'ip' 

,但我是新来bash和我不知道:)

回答

4

这里是一个脚本,它完全符合你的要求:

#!/bin/bash 

HOSTS=$(nmap -sP -n -oG - 192.168.1.1-10 | grep "Up" | awk '{print $2}') 

for host in ${HOSTS}; do 
    arp -an | grep ${host} | awk '{print $2 $4}' 
done 
+0

伟大的!现在的问题是,我得到像 - (10.0.0.10)(不完整)的错误。 – ajitam 2011-02-05 00:19:50

2

如何尝试使用arp-scan,如:

sudo arp-scan --interface=wlan0 192.168.1.0/24 
0

对于查询的第二部分你可以使用arping:

for host in $(nmap -sP -n -oG - 192.168.83.1-35 | grep "Up" | awk '{print $2}'); 
    do arping $host -c 1; 
done 
0

这一个输出的greppable格式的所有记录:

nmap -n -sP 10.0.3.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}' 

这似乎也工作了IP的/ MAC的未已经在主机ARP表。这是好事。在我的系统从接受的答案脚本只能说明这是在ARP表中列出的主机...

结果:

10.0.3.100 B8:27:EB:8E:C5:51 
10.0.3.101 00:26:B6:E1:4B:EB 
10.0.3.112 00:01:29:02:55:25 
etc..