如何从gen_tcp:accept / 1返回的套接字获取MAC地址?

时间:2018-09-10 03:08:15

标签: erlang elixir gen-tcp

到目前为止,我有以下Elixir代码

{:ok, server_socket} = :gen_tcp.listen(port)
{:ok, client_socket} = :gen_tcp.accept(server_socket)

如何从client_socket获取MAC地址?

P.S。我知道MAC地址每跳都会更改,但是我的网络确保从客户端到服务器只有一跳,因此,如果我可以获取MAC地址,那肯定是客户端的。

2 个答案:

答案 0 :(得分:1)

Erlang提供了:inet.getifaddrs/0来获取接口名称及其地址的列表,但是没有现成的方法可以让您从以下位置获取连接的主机或路由器的mac地址。一个插座。

问题在于TCP独立于任何MAC级别协议。实际上,在使用以太网链路层时,TCP堆栈使用ARP来获取连接的主机或路由器的MAC。

一些可能的解决方案是:

  • 通过一些ioctl SIOCGARP代码了解C的结果
  • 使用System.cmd来获取arp之类的Shell程序的结果

答案 1 :(得分:0)

您可以将os:cmd与IP邻居显示结合使用

os:cmd("ip neighbor show").