我在實習期間編寫了幾個perl腳本,我想簡化它們的使用。腳本在arg中詢問一個mac地址,並返回哪個開關連接,速度等等。 而不是給出一個mac地址,我想給一臺計算機的主機名。那麼,我該如何解析主機名到mac地址?
謝謝,再見。按主機名解析mac地址
編輯 - >解決方案可能是:bash命令或Perl模塊或功能強大的東西這樣的...
我在實習期間編寫了幾個perl腳本,我想簡化它們的使用。腳本在arg中詢問一個mac地址,並返回哪個開關連接,速度等等。 而不是給出一個mac地址,我想給一臺計算機的主機名。那麼,我該如何解析主機名到mac地址?
謝謝,再見。按主機名解析mac地址
編輯 - >解決方案可能是:bash命令或Perl模塊或功能強大的東西這樣的...
這有幫助嗎?
[[email protected] ~]$ arp -an
? (4.121.8.3) at 08:00:27:f5:5b:6b [ether] on eth0
? (4.121.8.4) at 08:00:27:f5:5b:6b [ether] on eth0
? (4.121.8.1) at 00:1b:53:6b:c9:c4 [ether] on eth0
[[email protected] ~]$
在蟒蛇...
#!/usr/bin/env python
import subprocess
import re
def parse_arpline(line, hosts):
match = re.search(r'\((\S+?)\)\s+at\s+(\S+)', line)
if match is not None:
ipaddr = match.group(1)
mac = match.group(2)
hosts.append((ipaddr, mac))
return hosts
SUBNET = '192.168.1.0/24' # Insert your subnet here
subprocess.Popen([r"nmap","-sP", SUBNET],stdout=subprocess.PIPE).communicate()
p = subprocess.Popen([r"arp","-an"],stdout=subprocess.PIPE).communicate()[0].split('\n')
hosts = []
ii = 0
for line in p:
hosts = parse_arpline(line, hosts)
ii +=1
# Iterate and do something with the hosts list
print hosts
在Perl
...
my $SUBNET = '192.168.1.0/24'; # Insert your subnet here
`nmap -sP $SUBNET`;
my $p = `arp -an`;
for my $line (split('\n', $p)) {
$line=~/\((\S+?)\)\s+at\s+(\S+)/;
$ipaddr = $1;
$mac = $2;
# do something with with each mac and ip address
}
@eouti,'arp'命令對500臺計算機沒有幫助? – 2011-05-09 12:41:35
@eouti,你有一種奇怪的方式與試圖幫助你的人進行交互 – 2011-05-09 13:10:51
'arp'緩存將只填充本地主機已與之交互(並緩存了ARP查找的響應)的主機。如果您感興趣的主機不在緩存中,則需要生成ARP請求。 – jmtd 2011-05-09 13:35:16
這是什麼腳本的範圍是什麼?網絡,主機和交換機有多大?你正在訪問交換機信息,你是網絡管理員嗎? – MattH 2011-05-09 13:56:12
@MattH:此腳本本地化公司中的mac地址。網絡大約有20臺思科交換機(主要是2960臺),大約500臺計算機,或許更多。我不是管理員,我在這裏是爲了我的實習,我要求使用SNMP(使用Perl)進行信息交換。爲了簡化他人腳本,我寫了CGI,在瀏覽器中顯示,並且我想輸入PC名稱而不是mac地址。 – eouti 2011-05-09 14:01:04
主機是否通過DHCP獲取他們的IP?如果是這樣,您的公司可能已經有IP/MAC數據庫。你是否也可以通過SNMP訪問路由器的ARP表? – MattH 2011-05-09 14:21:39