2011-05-09 173 views
1

我在實習期間編寫了幾個perl腳本,我想簡化它們的使用。腳本在arg中詢問一個mac地址,並返回哪個開關連接,速度等等。 而不是給出一個mac地址,我想給一臺計算機的主機名。那麼,我該如何解析主機名到mac地址?
謝謝,再見。按主機名解析mac地址

編輯 - >解決方案可能是:bash命令或Perl模塊或功能強大的東西這樣的...

+0

這是什麼腳本的範圍是什麼?網絡,主機和交換機有多大?你正在訪問交換機信息,你是網絡管理員嗎? – MattH 2011-05-09 13:56:12

+0

@MattH:此腳本本地化公司中的mac地址。網絡大約有20臺思科交換機(主要是2960臺),大約500臺計算機,或許更多。我不是管理員,我在這裏是爲了我的實習,我要求使用SNMP(使用Perl)進行信息交換。爲了簡化他人腳本,我寫了CGI,在瀏覽器中顯示,並且我想輸入PC名稱而不是mac地址。 – eouti 2011-05-09 14:01:04

+0

主機是否通過DHCP獲取他們的IP?如果是這樣,您的公司可能已經有IP/MAC數據庫。你是否也可以通過SNMP訪問路由器的ARP表? – MattH 2011-05-09 14:21:39

回答

2

這有幫助嗎?

[[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 
} 
+0

@eouti,'arp'命令對500臺計算機沒有幫助? – 2011-05-09 12:41:35

+6

@eouti,你有一種奇怪的方式與試圖幫助你的人進行交互 – 2011-05-09 13:10:51

+1

'arp'緩存將只填充本地主機已與之交互(並緩存了ARP查找的響應)的主機。如果您感興趣的主機不在緩存中,則需要生成ARP請求。 – jmtd 2011-05-09 13:35:16

0

ethers文件在UNIX系統上的以太網地址映射到IP號碼(或主機名)。如果您的/etc/ethers得到適當維護,您可以在那裏查找它。

+0

Thx,但我的維護不當,空文件。 – eouti 2011-05-09 12:23:57

+0

然後保持正確。 – jettero 2011-09-29 15:29:37

相關問題