Code: Select all
(ipHdr_FragsOff & $0020)
(ipHdr_FragsOff & $0040)
(ipHdr_FragsOff & $0080)
Code: Select all
(ipHdr_FragsOff & $0020)
(ipHdr_FragsOff & $0040)
(ipHdr_FragsOff & $0080)
Code: Select all
ipHdr_Length = PeekA(@*ppIpHdr\HdrLength) & %1111
ipHdr_Version = (PeekA(@*ppIpHdr\Version) >> 4)
ipHdr_TOS = htons_(PeekA(@*ppIpHdr\TOS))
ipHdr_TotalLength = htons_(PeekU(@*ppIpHdr\Length))
ipHdr_Id = htons_(PeekU(@*ppIpHdr\Id))
ipHdr_FragsOff = PeekU(@*ppIpHdr\FragOff0)
FlagMF = ipHdr_FragsOff & $0020
FlagDF = ipHdr_FragsOff & $0040
FlagReseverd = ipHdr_FragsOff & $0080
ipHdr_TTL = PeekA(@*ppIpHdr\TTL)
ipHdr_Protocol = PeekA(@*ppIpHdr\Protocol)
ipHdr_Checksum = PeekU(@*ppIpHdr\Checksum)
ipHdr_SrcAddr.s = IPString(PeekL(@*ppIpHdr\SrcAddr)) ;Dropped htonl_(), Native PB command sufficient.
ipHdr_DstAddr.s = IPString(PeekL(@*ppIpHdr\DstAddr))
Debug "ppIpHdr\HdrLength: " + ipHdr_Length
Debug "ppIpHdr\Version: " + ipHdr_Version
Debug "ppIpHdr\TOS: " + ipHdr_TOS
Debug "ppIpHdr\Length: " + ipHdr_TotalLength
Debug "ppIpHdr\Id: " + ipHdr_Id
Debug "ppIpHdr\FragOff0: " + ipHdr_FragsOff
If FlagReseverd : Debug "Reserved" : EndIf
If FlagDF : Debug " Don't Fragment (DF) set" : EndIf
If FlagMF : Debug " More Fragments (MF) set" : EndIf
Debug "-"
#define DIVERT_IPHDR_GET_FRAGOFF(hdr)
(((hdr)->FragOff0) & 0xFF1F)
Fragment Offset field... almost forgot about that.JHPJHP wrote:Nice - looks like you have a good understanding of packets.
NB*: Updated my previous post (including link) - finished IPv6 stuff.
Found this in the documentation (divert.h) get / set FragOff0 - good for a Macro:
- what is the first one for: 0xFF1F?
Code: Select all
ipHdr_Length = PeekA(@*ppIpHdr\HdrLength) & %1111
ipHdr_Version = (PeekA(@*ppIpHdr\Version) >> 4)
ipHdr_TOS = htons_(PeekA(@*ppIpHdr\TOS))
ipHdr_TotalLength = htons_(PeekU(@*ppIpHdr\Length))
ipHdr_Id = htons_(PeekU(@*ppIpHdr\Id))
ipHdr_FragsOff = PeekU(@*ppIpHdr\FragOff0)
FlagMF = ipHdr_FragsOff & $0020
FlagDF = ipHdr_FragsOff & $0040
FlagReseverd = ipHdr_FragsOff & $0080
FragOffset = ipHdr_FragsOff & $FF1F
ipHdr_TTL = PeekA(@*ppIpHdr\TTL)
ipHdr_Protocol = PeekA(@*ppIpHdr\Protocol)
ipHdr_Checksum = PeekU(@*ppIpHdr\Checksum)
ipHdr_SrcAddr.s = IPString(PeekL(@*ppIpHdr\SrcAddr)) ;Dropped htonl_(), Native PB command sufficient.
ipHdr_DstAddr.s = IPString(PeekL(@*ppIpHdr\DstAddr))
Debug "ppIpHdr\HdrLength: " + ipHdr_Length
Debug "ppIpHdr\Version: " + ipHdr_Version
Debug "ppIpHdr\TOS: " + ipHdr_TOS
Debug "ppIpHdr\Length: " + ipHdr_TotalLength
Debug "ppIpHdr\Id: " + ipHdr_Id
Debug "ppIpHdr\FragOff0: " + ipHdr_FragsOff
If FlagReseverd : Debug "Reserved" : EndIf
If FlagDF : Debug " Don't Fragment (DF) set" : EndIf
If FlagMF : Debug " More Fragments (MF) set" : EndIf
Debug "Frag Offset: " + FragOffset
Debug "-"
JHPJHP wrote:Sorry about this posting thing... not sure if you noticed - it takes me 3 or 4 times to get it right, and some times I don't even realize that you've already responded.
From documentation: ntohs(WINDIVERT_IPHDR_GET_FRAGOFF(ip_header))ppIpHdr\FragOff0 (64)
--Bit 0 (Reseverd): 0
--Bit 1 (May Fragment = 0 / Don't Fragment = 1): 64
--Bit 2 (Last Fragment = 0 / More Fragments = 1): 0
--Fragment Offset: 0
Code: Select all
FragOff0.u = PeekU(@*ppIpHdr\FragOff0)
Debug "ppIpHdr\FragOff0 (" + Str(FragOff0) + ")"
Debug "--Bit 0 (Reseverd): " + Str((FragOff0 & $0080) >> 7)
Debug "--Bit 1 (May Fragment = 0 / Don't Fragment = 1): " + Str((FragOff0 & $0040) >> 6)
Debug "--Bit 2 (Last Fragment = 0 / More Fragments = 1): " + Str((FragOff0 & $0020) >> 5)
Debug "--Fragment Offset: " + Str(FragOff0 & $FF1F)