通过MAC地址验证TCP连接是否来自同一台计算机

Ala*_*irG 4 c sockets linux mac-address

请不要批评解决方案.这不是我的设计,是的,它很糟糕.

在运行Linux并使用C的计算机上,我们需要验证与进程建立的TCP连接是否来自同一台计算机.通过IP地址执行此操作是有问题的,因为操作系统生成两个IP地址,并且该进程只知道一个.无论如何,通过IP地址验证有点差.

我们希望通过将"远程"MAC地址与本地MAC地址进行比较来进行验证.我们已经获得了本地MAC地址.我需要知道的是如何获得"远程"MAC地址.它是在形成连接时发送的数据包中(以及随后的所有连接).我们如何将其拖出以太网层?

在有人再说一遍之前,我知道如果它不在同一个子网/局域网上,你就无法获得远程主机的MAC地址.没关系.据推测,我们会得到像00:00:00:00:00:00这样的东西,因为这与本地MAC地址不同,它会有所不同 - 正是我们想要的.

-

那么,总而言之,我们有一个TCP连接套接字fd,我们收到了一个数据包,那么我们如何找到远程主机的MAC地址,即数据包头部的MAC地址?

Chr*_*ton 10

如果我理解正确,你不是试图分开远程机器,而是使用源和目标MAC匹配从机器发送到自身的流量的想法,以便只允许本地流量.

这似乎相当迂回,并且已被指出,不安全.

一个更好的想法可能是让TCP客户端只监听环回接口(127.0.0.1)而不监听INADDR_ANY.或者更进一步使用unix-domain套接字而不是TCP套接字(当今X服务器使用的常用方法,以防止远程连接的可能性)