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

问题描述 投票:0回答:1

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

:socket
模块:

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)。

sockets tcp network-programming erlang elixir
1个回答
0
投票

它在我的 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)
© www.soinside.com 2019 - 2024. All rights reserved.