【问题标题】:How can I get the MAC address from a socket returned from gen_tcp:accept/1?如何从 gen_tcp:accept/1 返回的套接字中获取 MAC 地址?
【发布时间】:2018-09-21 05:37:52
【问题描述】:

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

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

如何从client_socket 获取 MAC 地址?

附:我知道 MAC 地址每跳都会改变,但我的网络确保从客户端到服务器只有一跳,所以如果我能获得 MAC 地址,那肯定是客户端的。

【问题讨论】:

    标签: erlang elixir gen-tcp


    【解决方案1】:

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

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

    一些可能的解决方案是:

    • 通过一些 C 代码挂钩到 ioctl SIOCGARP 的结果
    • 使用System.cmd 获得像arp 这样的shell 程序的结果

    【讨论】:

      【解决方案2】:

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

      os:cmd("ip neighbor show").
      

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多