在堆栈

时间:2018-02-12 18:47:10

标签: linux haskell haskell-stack

不确定这是否更适合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执行数据包操作?

另外,在使用堆栈生成独立可执行文件时,如何确保可执行文件可以执行数据包捕获?我如何在构建过程中应用这些权限?

0 个答案:

没有答案