无法使用erlangs `:socket`模块接收TCP数据包

oyt4ldly  于 5个月前  发布在  Erlang
关注(0)|答案(1)|浏览(51)

我正在尝试通过erlangs :socket模块使用低级套接字接收所有TCP数据包:

def start() do
  {:ok, socket} = :socket.open(:inet, :raw, :tcp)
  recv(socket)
end

defp recv(socket) do
  :socket.recv(socket) |> IO.inspect()
  recv(socket)
end

字符串
但是没有收到任何数据包。使用:socket.open(:inet, :raw, :ip)可以工作并接收数据包。通过:socket.bind/2绑定(例如:socket.bind(socket, :any)或其他变体)也没有帮助。我也以root身份运行函数。捕获TCP数据包需要任何特定的配置吗?我如何捕获所有TCP数据包?
我知道第三方软件包,例如procket,但我想使用:sockets模块。
(使用MacOS,但在Linux上也不起作用)。

dgtucam1

dgtucam11#

它适用于我的Linux机器。

% elixir --version
Erlang/OTP 24 [erts-12.2.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]

Elixir 1.12.2 (compiled with Erlang/OTP 24)

字符串

相关问题