AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 783652
Accepted
metablaster
metablaster
Asked: 2024-09-18 05:33:27 +0800 CST2024-09-18 05:33:27 +0800 CST 2024-09-18 05:33:27 +0800 CST

为什么 ARP 中使用 00:00:00:00:00:00 地址而不是广播地址 ff:ff:ff:ff:ff:ff?

  • 772

以下是我精简的ARP规则集,仅显示广播规则,其他规则(此处未显示)不相关。

请参阅有问题的代码注释(?)

#!/usr/sbin/nft -f

add chain arp arp_table input {
    # filter = 0
    # Packets delivered to the local system
    type filter hook input priority filter; policy drop;
}

add chain arp arp_table output {
    # filter = 0
    # Packets send by the local system
    type filter hook output priority filter; policy drop;
}

# ARP Broadcast address
define broadcast_ether = { ff:ff:ff:ff:ff:ff }

# IPv4 network address
define network_addr_4 = { 192.168.1.0/24 }

# NIC ether address
define physical_ether = { bb:c9:51:d4:4a:b6 }

# Why input to broadcast address never hits?
# This rule should handle broadcast input
add rule arp arp_table input arp daddr ether $broadcast_ether log prefix "ACCEPT input broadcast: " accept

# Why input to 00:00:00:00:00:00 hits instead?
# This rule handles input toward 00:00:00:00:00:00 from LAN
add rule arp arp_table input arp saddr ip $network_addr_4 arp daddr ether 00:00:00:00:00:00 accept

# Why output to broadcast never hits?
# This rule should handle output toward ff:ff:ff:ff:ff:ff to LAN
add rule arp arp_table output arp daddr ether $broadcast_ether log prefix "ACCEPT output broadcast: " accept

# Why output to 00:00:00:00:00:00 hits instead?
# This rule handles output toward 00:00:00:00:00:00 to LAN
add rule arp arp_table output arp saddr ether $physical_ether arp daddr ether 00:00:00:00:00:00 accept

这里有几个问题,主要问题是ARP广播流量ff:ff:ff:ff:ff:ff不存在,这就是为什么我添加了日志语句以希望捕获这种流量,但它从未出现,对于input和output流量都如此。

相反,我看到很多针对00:00:00:00:00:00地址的输入/输出,这表明该00:00:00:00:00:00地址某种程度上是广播地址。

所以主要的问题是为什么我看不到ARP指向广播地址的流量以及为什么00:00:00:00:00:00使用地址来代替?

第二个问题是,什么是00:00:00:00:00:00地址?为什么需要它以及它意味着什么?

如果我阻止来往的流量00:00:00:00:00:00(例如,通过删除这些规则),那么网络将由于此类ARP数据包被丢弃而停止运行。

nftables
  • 1 1 个回答
  • 49 Views

1 个回答

  • Voted
  1. Best Answer
    ilkkachu
    2024-09-22T00:34:11+08:002024-09-22T00:34:11+08:00

    nftables wiki 列出了 ether {saddr | daddr} «ether_addr»用于匹配以太网报头中的源和目标;以及arp {saddr | daddr } ether «ether_addr»用于匹配 ARP 报头中的发送方硬件地址 (SHA) 和目标硬件地址 (THA) 的命令。这些命令也许可以更清楚地命名,以便更清楚地区分 ARP 和以太网报头,也因为 ARP 报头中的字段称为目标地址,而不是目标 (*)。

    ARP 请求的以太网目标地址将是广播地址,ff:ff:ff:ff:ff:ff因为该请求必须发送给每个可能的响应者。

    您可能不应该依赖包含任何特定内容的 ARP 请求的 ARP 目标硬件地址,因为这是数据包发送者不知道且正在查询的值。它很可能设置为全零,如您所见,但RFC 826似乎为它留有余地:

    然后,地址解析模块将 [...] 设置 ar$op为ares_op$REQUEST,ar$sha其中包含其自身的 48 位以太网地址、ar$spa其自身的协议地址以及ar$tpa 尝试访问的机器的协议地址。 它不会设置ar$tha为任何特定值,因为它正在尝试确定这个值。 如果这有利于实现的某些方面,它可以将 ar$tha 设置为硬件的广播地址(在 10Mbit 以太网的情况下,全部设置为 1)。

    (* practicalnetworking.net指出了此处“目标”和“目的地”含义上的差异:在代理 ARP 的情况下,被查询的主机(“目标”)将看不到查询本身(因此不是其“目的地”),因为其他一些主机代表它做出回答。)

    • 2

相关问题

  • nftables:更改或创建新表时刷新/删除

  • nftables 不工作,我做对了吗?

  • 我可以在 nftables 中匹配一组负数吗?

  • 如何在 nftables 中按名称创建一组命名接口?

  • 重启后 Nftables 规则消失了!

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve