Skip to content

Commit 16b0a7d

Browse files
made TCP flags better
1 parent 4f934e8 commit 16b0a7d

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

layers/tcp.go

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,40 @@ package layers
33
import (
44
"encoding/binary"
55
"fmt"
6+
"strings"
67
)
78

89
const headerSizeTCP = 20
910

11+
var tcpFlags = []string{"CWR", "ECE", "URG", "ACK", "PSH", "RST", "SYN", "FIN"}
12+
13+
type TCPFlag struct {
14+
Val uint8
15+
Desc string
16+
}
17+
1018
type TCPFlags struct {
1119
Raw uint8
12-
CWR uint8
13-
ECE uint8
14-
URG uint8
15-
ACK uint8
16-
PSH uint8
17-
RST uint8
18-
SYN uint8
19-
FIN uint8
20+
Val []*TCPFlag
2021
}
2122

2223
func (t *TCPFlags) String() string {
23-
return fmt.Sprintf("CWR %d ECE %d URG %d ACK %d PSH %d RST %d SYN %d FIN %d",
24-
t.CWR,
25-
t.ECE,
26-
t.URG,
27-
t.ACK,
28-
t.PSH,
29-
t.RST,
30-
t.SYN,
31-
t.FIN)
24+
var sb strings.Builder
25+
for _, flag := range t.Val {
26+
if flag.Val == 1 {
27+
sb.WriteString(flag.Desc)
28+
sb.WriteString(" ")
29+
}
30+
}
31+
return strings.TrimSpace(sb.String())
3232
}
3333

3434
func newTCPFlags(flags uint8) *TCPFlags {
35-
return &TCPFlags{
36-
Raw: flags,
37-
CWR: (flags >> 7) & 1,
38-
ECE: (flags >> 6) & 1,
39-
URG: (flags >> 5) & 1,
40-
ACK: (flags >> 4) & 1,
41-
PSH: (flags >> 3) & 1,
42-
RST: (flags >> 2) & 1,
43-
SYN: (flags >> 1) & 1,
44-
FIN: flags & 1}
35+
f := TCPFlags{Raw: flags, Val: make([]*TCPFlag, 0, 8)}
36+
for i, flag := range tcpFlags {
37+
f.Val = append(f.Val, &TCPFlag{Val: (flags >> (7 - i)) & 1, Desc: flag})
38+
}
39+
return &f
4540
}
4641

4742
// TCP protocol is described in RFC 761.
@@ -78,7 +73,7 @@ func (t *TCPSegment) String() string {
7873
- Acknowledgment Number: %d
7974
- Data Offset: %d
8075
- Reserved: %d
81-
- Flags: %s
76+
- Flags: %s (%#08b)
8277
- Window Size: %d
8378
- Checksum: %#04x
8479
- Urgent Pointer: %d
@@ -93,6 +88,7 @@ func (t *TCPSegment) String() string {
9388
t.DataOffset,
9489
t.Reserved,
9590
t.Flags,
91+
t.Flags.Raw,
9692
t.WindowSize,
9793
t.Checksum,
9894
t.UrgentPointer,

0 commit comments

Comments
 (0)