繁体   English   中英

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

[英]How can I get the MAC address from a socket returned from gen_tcp:accept/1?

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

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

如何从client_socket获取MAC地址?

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

Erlang提供了:inet.getifaddrs/0来获取接口名称及其地址的列表,但是没有开箱即用的方法可以让您从套接字获取连接的主机或路由器的mac地址。 。

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

一些可能的解决方案是:

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

您可以结合使用os:cmd和ip neighbor show

os:cmd("ip neighbor show").

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM