通过在我的路由器上运行数据包捕获,我看到我的一些服务器向存在于其网络外部的 IP 发送 ARP 请求。
例如,如果我的网络是:
Network: 8.8.8.0/24
Gateway: 8.8.8.1 (MAC: 00:21:9b:aa:aa:aa)
Example Server: 8.8.8.20 (MAC: 00:21:9b:bb:bb:bb)
Run Code Online (Sandbox Code Playgroud)
通过在具有 8.8.8.1 的接口上运行捕获,我看到如下请求:
Sender Mac: 00:21:9b:bb:bb:bb
Sender IP: 8.8.8.20
Target MAC: 00:21:9b:aa:aa:aa
Target IP: 69.63.181.58
Run Code Online (Sandbox Code Playgroud)
有人见过这种行为吗?我对 ARP 的理解是,请求应该只针对子网内的 IP 发出……我对 ARP 的理解是否感到困惑?如果我不感到困惑,有人见过这种行为吗?
此外,这些似乎是突发性的,当我执行诸如 ping 网络外的 IP 之类的操作时不会发生这种情况。
更新:
回应伊恩的问题。我没有运行像 Hyper-V 这样的东西。我有多个接口,但只有一个是活动的(使用 BACS 故障转移组合)。子网掩码是 255.255.255.0(即使它不同,它也不能解释像 69.63.181.58 这样的 IP)。
当我运行 MS 网络监视器或wireshark 时,我没有看到这些 ARP 请求。发生的情况是,在路由器捕获时,我看到来自主机的网络外部 IP 请求大约有 10 个突发。在使用wireshark 或NetMon的机器上,我看到网络上所有机器的大量ARP 响应。但是,我在捕获中没有看到任何要求这些响应的请求。
因此,它似乎可能正在刷新 arp 缓存,但包括网络外部的 IP。此外,当它这样做时,NetMon 不显示 ARP 请求?
如果我有两个知道 MAC 地址的 NIC。
在不登录服务器的情况下,我如何确定哪些具有 IP 地址10.10.10.10?
可以arp以某种方式用于此吗?
我目前正在尝试了解更高级的网络概念。我这样做的方法是在我作为系统管理员管理的其中一台服务器上运行并运行网络捕获来查看和理解数据。(我运行此捕获的机器是 serveriamon.networkname.local,IP 为 172.16.2.7)
这使我在网络上进行了这次交流:
1127 11:46:55 12/10/2012 30.2960887 172.16.3.30
serveriamon.networkname.local ARP ARP:Request, 172.16.3.30 asks for 172.16.2.7
1128 11:46:55 12/10/2012 30.2961939 serveriamon.networkname.local 172.16.3.30 ARP ARP:Response, 172.16.2.7 at 78-2B-CB-23-8D-07
Run Code Online (Sandbox Code Playgroud)
我能理解这种交流。位于 172.16.3.30 的机器想要找出 172.16.2.7 的 MAC 位置和内容。位于该地址的服务器(此服务器)回复其包含 Mac 地址的 ARP 响应。
紧接着,此帧随即发生:
1129 11:46:55 12/10/2012 30.2964210 172.16.3.30 serveriamon.networkname.local SNTP SNTP:NTPv3 Request, Leap = 0, Mode = 3, RID = 5154 {SNTP:377, UDP:376, IPv4:375}
Run Code Online (Sandbox Code Playgroud)
我理解这是对服务器时间的请求。没关系。下一帧是什么让我困惑:
1130 11:46:55 12/10/2012 30.2972641 serveriamon.networkname.local 172.16.3.30 ARP ARP:Request, 172.16.2.7 asks for 172.16.3.30
Run Code Online (Sandbox Code Playgroud)
SNTP 请求的第 1129 帧中嵌入的是源地址。为什么服务器会立即进行广播以找出 IP 地址在哪里? …
我目前正在运行配置为“ndis-bridged”网络模式的coLinux,其无线网卡或驱动程序似乎无法或不愿意接受非广播第 2 层流量,或者不是以无线卡的主 MAC 地址为目的地的流量。
找出问题所在后,我尝试将 coLinux 接口配置为与主机具有相同的 MAC 地址。神奇的是,网络开始发挥作用。不幸的是,只有一个问题仍然存在:主机无法与 coLinux 实例通信,即使 LAN 的其余部分可以。
我发现通过向主机添加一个用于 coLinux 实例的 IP 地址的静态 ARP 条目,我可以在桥接模式下实现完全连接,即使无线网卡/驱动程序不想一起玩。
尽管这个设置有点hackishness,我还是想保留它有几个原因,主要是coLinux 实例的IO 性能。这给我带来了一个问题:在主机上保留 ARP 条目。
我在网上搜索过,但一直无法找到与/etc/arpUNIX等效的 WinNT 。这样的文件存在吗?我怀疑在注册表中的某个地方,但可惜,到目前为止,我的搜索没有结果。
我唯一的选择是在启动时运行一个批处理文件,以使用arp命令行工具重新创建 ARP 条目,但具有讽刺意味的是,这似乎很黑。:)
谢谢。
是真的 ARP 仅适用于单个广播域,并且 arp 数据包不会从 1 个网络路由到另一个网络吗?
任何人都可以给我任何例子或任何信息来源吗
希望得到积极的回应。
我在服务器上静态配置了一个接口的 IP 地址:
ip addr add 10.40.0.6/16 broadcast 10.40.255.255 dev eth1
Run Code Online (Sandbox Code Playgroud)
如果我尝试 ping 网络上的机器(例如 10.40.0.1),它会失败并显示“目标主机无法访问”。
当 ping 运行时,如果我执行以下操作,我根本看不到任何活动
tcpdump -i eth1 icmp
Run Code Online (Sandbox Code Playgroud)
但是,如果我改为监听回送接口:
tcpdump -i lo icmp
Run Code Online (Sandbox Code Playgroud)
然后我看到类似的东西:
16:02:57.369632 IP 10.40.0.6 > 10.40.0.6: ICMP host 10.40.0.1 unreachable, length 92
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么 ICMP 数据包没有通过 eth1 接口显示出来?
编辑:
# ip r ls
10.40.0.0/16 dev eth1 proto kernel scope link src 10.40.0.6
Run Code Online (Sandbox Code Playgroud) 我决定使用 veth :创建一对 veth 并将 ping 从一端发送到另一端。
$ ip link add type veth
$ ip addr add 192.168.99.1 dev veth4
$ ip addr add 192.168.99.2 dev veth5
$ ip link dev veth4 set up
$ ip link dev veth5 set up
Run Code Online (Sandbox Code Playgroud)
让我们检查。
$ ip a
18: veth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 6a:dc:02:5b:f0:f3 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.1/24 scope global veth4
valid_lft forever preferred_lft forever
19: veth5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP …Run Code Online (Sandbox Code Playgroud) 我管理一个有很多笔记本电脑的网络。使用笔记本电脑的用户经常出差。当有人获得一台新计算机时,我遇到了确定主机名应该是什么的问题。主机名方案是下一个可用数字[companyname]xxx在哪里xxx。我通常从我认为可用的任何主机名开始 ping 并增加/减少数字,直到找到可用的主机名。但是,当用户的笔记本电脑不在网络中时,此方法不起作用。
有没有办法检查网络上的所有主机名,甚至是当前未连接的笔记本电脑?或者我在这一切都错了吗?
有两点需要注意: