UDP
A UDP header consists of:
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
| Source Port | Destination Port |
+-------------------------------+-------------------------------+
| Length | Checksum |
+-------------------------------+-------------------------------+
16-bit source port (
UDP#sport
),16-bit destination port (
UDP#dport
),16-bit length (
UDP#length
),16-bit checksum (
UDP#checksum
),and a body (
UDP#body
).
A UDP header may be built this way:
pg> PacketGen::Header::UDP.new(dport: 53, sport: 65053)
=> ---- PacketGen::Header::UDP ------------------------------------------
Int16 sport: 65053 (0xfe1d)
Int16 dport: 53 (0x0035)
Int16 length: 8 (0x0008)
Int16 checksum: 0 (0x0000)
A UDP over IP packet may be created this way:
pkt = PacketGen.gen('IP', src: '127.0.0.1', dst: '127.0.0.1').
add('UDP', dport: 80, sport: 44158, body: 'abcd')
pkt.is?('IP') # => true
pkt.is?('UDP') # => true
pkt.udp # => PacketGen::Header::UDP
pkt.udp.sport # => 65053
pkt.udp.dport # => 53
pkt.udp.length # => Integer
pkt.udp.checksum # => Integer
pkt.udp.body # => "abcd"
pkt.body # => "abcd"
pkt.udp.sport = 44444
checksum
and length
fields may be computed by Header::UDP#calc_sum
and Header::UDP#calc_length
respectively. All checksum and length fields from this packet may by computed at once using pkt.calc
:
pg> pkt.calc
pg> pkt
=> -- PacketGen::Packet -------------------------------------------------
---- PacketGen::Header::IP -------------------------------------------
Int8 u8: 69 (0x45)
version: 4
ihl: 5
Int8 tos: 0 (0x00)
Int16 length: 32 (0x0020)
Int16 id: 39945 (0x9c09)
Int16 frag: 0 (0x0000)
flags: none
frag_offset: 0 (0x0000)
Int8 ttl: 64 (0x40)
Int8 protocol: 17 (0x11)
Int16 checksum: 57537 (0xe0c1)
Addr src: 127.0.0.1
Addr dst: 127.0.0.1
String options: ""
---- PacketGen::Header::UDP ------------------------------------------
Int16 sport: 44444 (0xad9c)
Int16 dport: 80 (0x0050)
Int16 length: 12 (0x000c)
Int16 checksum: 36640 (0x8f20)
---- Body ------------------------------------------------------------
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
----------------------------------------------------------------------
61 62 63 64 abcd
----------------------------------------------------------------------
See also http://rubydoc.info/gems/packetgen/PacketGen/Header/UDP.
Last updated