不确定这是否更适合Server Fault,如果是这种情况,请道歉。
我目前正在尝试使用Network.Pcap库捕获数据包,并围绕它编写了这个包装函数:
getRawPacket :: IO B.ByteString
getRawPacket = do
deviceName <- lookupDev
handle <- openLive deviceName 2048 False (-1)
setDirection handle Out
nextBS handle >>= (\(_,p) -> return p)
我正在使用stack来管理构建过程。当尝试在ghci中运行getRawPacket
时,使用sudo stack ghci --allow-different-user
启动它,我得到了预期的数据包数据。但是,当作为普通用户运行时,例如在此示例中为testuser
,
我收到以下消息:
*Main Pcs.Capture> getRawPacket
*** Exception: user error (enp0s25: You don't have permission to capture on that device (socket: Operation not permitted))
我已经按照this blog post的步骤进行了操作,但这些没有任何区别。是否有可能将linux权限赋予堆栈(/ testuser / ghc?)以允许它通过ghci执行数据包操作?
另外,在使用堆栈生成独立可执行文件时,如何确保可执行文件可以执行数据包捕获?我如何在构建过程中应用这些权限?