到目前为止,我有以下 Elixir 代码
{:ok, server_socket} = :gen_tcp.listen(port)
{:ok, client_socket} = :gen_tcp.accept(server_socket)
我怎样才能从 中获取 MAC 地址client_socket
?
PS我知道MAC地址每跳都会改变,但我的网络确保从客户端到服务器只有一跳,所以如果我能得到MAC地址,那肯定是客户端的。
Erlang 提供:inet.getifaddrs/0
了获取接口名称及其地址的列表,但是没有开箱即用的方法可以让您从套接字获取连接的主机或路由器的 MAC 地址。
问题是 TCP 独立于任何 MAC 层协议。在实践中,当使用以太网链路层时,TCP 栈使用 ARP 来获取连接的主机或路由器的 MAC。
一些可能的解决方案是:
ioctl SIOCGARP
通过一些C
代码挂钩的结果System.cmd
获取 shell 程序的结果,例如arp
您可以将 os:cmd 与 ip neighbor show 结合使用
os:cmd("ip neighbor show").