Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking Haskell中Pcap文件的解码_Networking_Haskell_Libpcap - Fatal编程技术网

Networking Haskell中Pcap文件的解码

Networking Haskell中Pcap文件的解码,networking,haskell,libpcap,Networking,Haskell,Libpcap,我正在试着解码a,它工作得很好,除了几件事 import Network.Pcap import System.IO import Control.Monad callfun f = do ( p , q ) <- next f print $ hdrSeconds p print $ hdrCaptureLength p print $ hdrWireLength p print q when ( hdrWireLength p

我正在试着解码a,它工作得很好,除了几件事

import Network.Pcap
import System.IO
import Control.Monad

callfun f = do
    ( p , q ) <- next f 
    print $ hdrSeconds p  
    print $ hdrCaptureLength p
    print $ hdrWireLength p
    print q 
    when ( hdrWireLength p /= 0 ) $ callfun f    

main = do
    f <- openOffline "udp_lite_full_coverage_0.pcap"
    callfun f 
导入网络.Pcap
导入系统.IO
进口管制
callfun f=do
(p,q)显示十六进制x“)$BS.unpack lst)
parseFile::BS.ByteString->Bool->IO[BS.ByteString]
parseFile xs revflag
|BS.null xs=return[]
|否则=做
让ind=如果revflag,则为hexTodec。反向。拿4。英国标准普尔8美元x
要不然就得去死。拿4。英国标准普尔8美元x
印刷工业
设(x,ys)=BS.splitAt(from积分ind)xs
--BS.putStrLn$x
tmp
我希望hdrSeconds p[time to capture]以与wireshark[Date:Month:Year Hour:Min:Sec]相同的格式返回时间

您可以使用
时间
包并将其转换为
UTCTime
。这使得提取月、日、年等信息变得很简单。更多信息,请查看黑线鳕

let epoch = pcapEpochTimeThatYouFindInOnlineDocumentation
diff <- hdrDiffTime p
let date = addUTCTime (realToFrac diff) epoch
至于在纯Haskell中实现这一点,我认为您需要退后一步,更多地了解Haskell作为一种语言,也许可以从一个教程,例如。如果您决心继续前进,那么请阅读该软件包,该软件包在邮件列表中被称为其非公共pcap Haskell库的首选库

我希望hdrSeconds p[time to capture]以与wireshark[Date:Month:Year Hour:Min:Sec]相同的格式返回时间

您可以使用
时间
包并将其转换为
UTCTime
。这使得提取月、日、年等信息变得很简单。更多信息,请查看黑线鳕

let epoch = pcapEpochTimeThatYouFindInOnlineDocumentation
diff <- hdrDiffTime p
let date = addUTCTime (realToFrac diff) epoch

至于在纯Haskell中实现这一点,我认为您需要退后一步,更多地了解Haskell作为一种语言,也许可以从一个教程,例如。如果你决心继续前进,那么请仔细阅读该计划,它在邮件列表中被称为其非公共pcap Haskell库的首选库。

您可以使用
Data.Time
模块将
hdrSeconds
返回的基于UNIX历元的时间转换为
LocalTime
对象,然后可以使用
formatTime
将其格式化为字符串

import Data.Time.Clock.POSIX
import Data.Time.Format
import Data.Time.LocalTime
import System.Locale
import Data.Word (Word32)

data MockPCap = MockPCap { hdrSeconds :: Word32 }

toPosixTime :: Word32 -> POSIXTime
toPosixTime = fromIntegral

localHdrTime p = do tz <- getCurrentTimeZone
                    return $ utcToLocalTime tz $ posixSecondsToUTCTime $ toPosixTime $ hdrSeconds p

main = let p = MockPCap 1318464165  {-- Mock a PCap object --}
       in do hTime <- localHdrTime p
             print $ formatTime defaultTimeLocale "%c" hTime
导入Data.Time.Clock.POSIX
导入Data.Time.Format
导入Data.Time.LocalTime
导入系统语言环境
导入数据。Word(Word32)
数据MockPCap=MockPCap{hdrSeconds::Word32}
toPosixTime::Word32->POSIXTime
toPosixTime=fromIntegral

localHdrTime p=do tz您可以使用
Data.Time
模块将
hdrSeconds
返回的基于UNIX历元的时间转换为
LocalTime
对象,然后可以使用
formatTime
将其格式化为字符串

import Data.Time.Clock.POSIX
import Data.Time.Format
import Data.Time.LocalTime
import System.Locale
import Data.Word (Word32)

data MockPCap = MockPCap { hdrSeconds :: Word32 }

toPosixTime :: Word32 -> POSIXTime
toPosixTime = fromIntegral

localHdrTime p = do tz <- getCurrentTimeZone
                    return $ utcToLocalTime tz $ posixSecondsToUTCTime $ toPosixTime $ hdrSeconds p

main = let p = MockPCap 1318464165  {-- Mock a PCap object --}
       in do hTime <- localHdrTime p
             print $ formatTime defaultTimeLocale "%c" hTime
导入Data.Time.Clock.POSIX
导入Data.Time.Format
导入Data.Time.LocalTime
导入系统语言环境
导入数据。Word(Word32)
数据MockPCap=MockPCap{hdrSeconds::Word32}
toPosixTime::Word32->POSIXTime
toPosixTime=fromIntegral
localHdrTime p=do tz有一个,它负责解析文件头和数据包记录头,因此您不必自己完成这项工作。但是,您仍然需要自己解析数据包数据。

有,它可以解析文件头和数据包记录头,因此您不必自己解析。但是,您仍然需要自己解析数据包数据