You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Erlang的:socket模块无法接收TCP数据包的问题求助

使用Erlang的:socket模块无法接收TCP数据包的问题求助

我最近在尝试用Erlang原生的: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

但运行后完全收不到任何TCP数据包。奇怪的是,如果我把打开套接字的参数改成:socket.open(:inet, :raw, :ip),就能正常接收数据包了。我也尝试过用:socket.bind/2做绑定操作,比如:socket.bind(socket, :any)或者其他的绑定形式,但都没有解决问题,而且我全程是用root权限来运行这些代码的。

想请教一下,要通过这种方式捕获TCP数据包,是不是需要什么特定的配置?有没有办法只用:socket模块就能实现捕获所有TCP数据包的需求?

我知道有procket这类第三方包可以实现类似功能,但我更希望基于Erlang原生的:socket模块来完成。

(目前在MacOS上测试,换成Linux环境也同样无法正常工作)

备注:内容来源于stack exchange,提问作者hilbor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:04:35