
[英]How can I detect a TCP timeout on an active socket in Elixir with gen_tcp?
[英]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.