hsns-0.5: Options.hs
module Options where
import System.Console.GetOpt
import Data.Maybe
data HsnsOpts = Opts {
count :: String, --done
snarflen :: String, --done
interface :: String, --done
version :: String, --done
nopromiscuous :: String, --done
iflist :: String, --done
buffered :: String, --done
help :: String, --done
bpf :: String -- filter string that will be passed to setfilter
}
data Flags =
Count String | -- amount of packets to take, must be String in constructor, that's how getOpt returns it
IfList | -- List the available interfaces
Listen String | -- Listen on the specified interface
LineBuffered | -- Turn on Line buffering
NoPromiscuous | -- Don't go into promiscuous mode.
SnarfLen String | -- Amount of data to snarf, default is 68
Version | -- version number
Help -- help info
options :: [OptDescr Flags]
options = [ Option ['h','?'] ["help"] (NoArg Help) "print this help information"
,Option ['c'] ["count"] (ReqArg Count "NUM") "take in NUM packets, default is 5, 0 means unlimited"
,Option ['D'] ["iflist"] (NoArg IfList) "list interfaces that can be captured upon"
,Option ['i'] ["interface"] (ReqArg Listen "INT") "listen on interface INT, defaults to eth0"
,Option ['l'] ["linebuffered"] (NoArg LineBuffered) "make output line-buffered"
,Option ['p'] ["nopromiscuous"] (NoArg NoPromiscuous) "do not go into promiscuous mode"
,Option ['s'] ["snarf"] (ReqArg SnarfLen "LEN") "change snarf length from default 68 to LEN"
,Option ['V'] ["version"] (NoArg Version) "output version number and exit"]
hsnsOptions :: [String] -> IO ([Flags],[String])
hsnsOptions av = do
case getOpt Permute options av of
(o,n,[]) -> return (o,n)
(_,_,e) -> ioError (userError (concat e ++ usageInfo header options))
where
header = "usage: hsns \"[PACKET FILTER]\" [OPTIONS...]"