获取客户端请求的 MAC?

获取客户端请求的 MAC?

我有一个包含 20 个树莓派(客户端)和 1 个服务器的网络。我想检查客户端请求的 MAC,可以吗?

此外,可能在客户不知道(也不可见)的情况下吗?

注意:我的目的是检查客户是否是假货/仿制品。 NB2:我已经运行了 VPN 选项。但我还是想检查一下MAC。

答案1

你的服务器是Linux主机吗?

如果您有客户端白名单,则可以iptables仅在特定输入端口上接受来自它们的请求。您还可以在 dmesg 中记录来自不良客户端的请求。

以下脚本定义MACCHECK链以接受来自已批准的 3 个 MAC 的数据包,并通过日志记录丢弃其他数据包。然后将INPUT链中的所有 tcp/80 或 tcp/443 数据包路由到MACCHECK.

iptables -N MACCHECK
iptables -A MACCHECK -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A MACCHECK -m mac --mac-source yy:yy:yy:yy:yy:yy -j ACCEPT
iptables -A MACCHECK -m mac --mac-source zz:zz:zz:zz:zz:zz -j ACCEPT
iptables -A MACCHECK -m limit --limit 3/hour -j LOG --log-prefix "Bad host: "
iptables -A MACCHECK -j DROP
iptables -A INPUT -p tcp -m tcp --dport 80 -j MACCHECK   # Checking all HTTP requests
iptables -A INPUT -p tcp -m tcp --dport 443 -j MACCHECK  # Checking all HTTPS requests

请注意,您的所有客户端都应与服务器位于同一网络中。

答案2

如果有一个直接的Raspberry Pi 和客户端之间的连接,即没有路由两者都在同一个部分, 这是可能的。只需使用 ARP 解析,例如:arp <client_ip_address>

答案3

仅当客户端位于同一网段(即中间没有路由器(交换机也可以))时,才能检查客户端的 MAC。您可以通过跟踪路由看到这一点:如果您traceroute 192.0.2.1从服务器运行,其中 192.0.2.1 是其中一个设备的地址,则它必须仅报告单个跃点,即目标。娜莎的yaegashi 的答案解释了如何做到这一点。

然而,即使可以,检查 MAC 并不能真正提供任何安全性,因为 MAC 很容易被伪造。大多数以太网设备都可以在软件中设置 MAC。

要识别硬件设备,基本上有一种方法:密码学。存储一个私钥并让它执行身份验证操作,证明它拥有私钥。

由于您显然正在使用网络应用程序,因此有一个工具可以实现此目的:TLS 客户端证书。使用 HTTPS 协议并让客户端使用其私钥向 Web 服务器进行身份验证。

不过,根据您使用此 VPN 的方式,它可能(或可能不)提供类似的功能。

相关内容