【问题标题】:Resolve mac address by host name通过主机名解析mac地址
【发布时间】:2011-08-21 15:53:11
【问题描述】:

我在实习期间写了几个 perl 脚本,我想简化它们的使用。脚本询问 arg、mac 地址,并返回连接的交换机、速度等。 我不想给一个mac地址,而是给一个计算机的主机名。那么,如何将主机名解析为 mac 地址呢?
谢谢再见。

编辑 -> 解决方案可能是:bash 命令或 perl 模块或类似的强大功能...

【问题讨论】:

  • 这个脚本的范围是什么?网络、主机和交换机有多大?您正在访问交换机信息,那么您是网络管理员吗?
  • @MattH :此脚本本地化公司中的 mac 地址。网络大约有 20 台 cisco 交换机(主要是 2960),大约 500 台计算机,也许更多。我不是管理员,我是来实习的,我询问信息以切换 SNMP(使用 Perl)。为了给别人简化脚本,我写了CGI,在浏览器中显示,我想输入PC名称而不是mac地址。
  • 主机是否通过 DHCP 获取 IP?如果是这样,您的公司可能已经有一个 IP/MAC 数据库。您是否也可以通过 SNMP 访问路由器的 ARP 表?
  • 您需要轮询多少个不同的子网以获取 MAC 地址?请记住,我在下面提供的解决方案仅适用于您的服务器连接到的子网
  • @MattH, @Mike Pennington :好的,伙计们,我明白了。网络管理员给了我一个 dhcp (.csv) 的导出文件。所以我可以解析主机名-> mac(-> ip)。谢谢各位。

标签: python perl ip mac-address hostname


【解决方案1】:

这有帮助吗?

[mpenning@Bucksnort ~]$ 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
[mpenning@Bucksnort ~]$

在python中...

#!/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 台计算机没有帮助怎么办?
  • @eouti,你与试图帮助你的人交流的方式很奇怪
  • arp 缓存将仅填充与本地主机交互的主机(并缓存 ARP 查找的响应)。如果您感兴趣的主机不在缓存中,您将需要生成一个 ARP 请求。
  • @jmtd,好点...他需要在运行 arp 之前运行 nmap -sP <subnet_addr>
  • 谢谢大家,很酷的帮助,srry Mike,不想变得讨厌。
【解决方案2】:

UNIX 系统上的ethers 文件将以太网地址映射到 IP 号(或主机名)。如果您的/etc/ethers 维护得当,您可以在那里查找。

【讨论】:

  • 谢谢,但我的没有妥善维护,空文件。
  • 这样维护得当。
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2014-10-13
  • 2013-02-28
  • 2013-01-29
  • 1970-01-01
  • 2018-01-02
相关资源
最近更新 更多