Networking Haskell中Pcap文件的解码
我正在试着解码a,它工作得很好,除了几件事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
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有一个,它负责解析文件头和数据包记录头,因此您不必自己完成这项工作。但是,您仍然需要自己解析数据包数据。有,它可以解析文件头和数据包记录头,因此您不必自己解析。但是,您仍然需要自己解析数据包数据