Haskell中的原始套接字
发布时间:2020-12-15 21:51:17 所属栏目:安全 来源:网络整理
导读:Network.Socket中提供了一个原始套接字类型,但是在近端绑定套接字上有一条注释“目前只支持Unix域套接字并支持Internet系列”.我怎样才能在 haskell中使用原始套接字? 我正在尝试实现的功能,如使用Python代码: import binasciiimport socket# Create raw s
Network.Socket中提供了一个原始套接字类型,但是在近端绑定套接字上有一条注释“目前只支持Unix域套接字并支持Internet系列”.我怎样才能在
haskell中使用原始套接字?
我正在尝试实现的功能,如使用Python代码: import binascii import socket # Create raw socket. ethType = b'FFFF' # 2 bytes,has to be >= 0x0600. FFFF is "unavailable" by IEEE. sock = socket.socket(socket.AF_PACKET,socket.SOCK_RAW) sock.bind( ('lo',int(ethType,16)) ) # Create packet. srcMac = b'000000000000' # 6 bytes destMac = b'000000000000' # 6 bytes header = binascii.a2b_hex( destMac + srcMac + ethType ) # 14 bytes message = b'Hello,World!' sock.send(header + message) # Receive such packets while True: print (sock.recv(65535)) EDIT1: SockAddrInet PortNumber HostAddress SockAddrInet6 PortNumber FlowInfo HostAddress6 ScopeID SockAddrUnix String 但这些似乎都没有. EDIT2: import Network.Socket sock <- socket AF_PACKET Raw 0xFFFF recv sock 0xFFFF EDIT3: sock <- socket AF_PACKET Raw 0xFFFF send sock "NULNULNULNULNULNULNULNULNULNULNULNUL255255" *** Exception: send: does not exist (No such device or address) 这是有道理的,因为内核对于实际传输数据包的接口没有任何线索.有没有办法将(原始)套接字绑定到Haskell中的接口? 解决方法
Network.Pcap可用于发送和接收原始数据.
import qualified Data.ByteString.Char8 as B import Network.Pcap main = do -- open device dev <- openLive "lo" 65535 False 0 setFilter dev "ether proto 0xFFFF" True 0 -- send sendPacketBS dev (B.pack "NULNULNULNULNULNULNULNULNULNULNULNUL255255Hello,World!") -- receive loopBS dev (-1) (_ packet -> putStrLn (show packet)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |