一、统计信息
var stats struct {
ipdefrag int
missedBytes int
pkt int
sz int
totalsz int
rejectFsm int
rejectOpt int
rejectConnFsm int
reassembled int
outOfOrderBytes int
outOfOrderPackets int
biggestChunkBytes int
biggestChunkPackets int
overlapBytes int
overlapPackets int
}
可以看到,都是一个一个数值类型的字段,存放各种不同的统计数据。
二、http读取
/*
* HTTP part
*/
type httpReader struct {
ident string // 标明源、目的端的字符串
isClient bool // 标明是http客户端,还是服务器
bytes chan []byte // 数据读取通道
data []byte // 数据缓冲
hexdump bool // 是否将16进制的body转成可读的,调用hex.Dump(body)
parent *tcpStream // 用于控制父流
}
func (h *httpReader) Read(p []byte) (int, error) {
ok := true
// 如果数据缓冲中不为空,从通道读取数据
for ok && len(h.data) == 0 {
h.data, ok = <-h.bytes
}
// 读取数据到缓冲失败
if !ok || len(h.data) == 0 {
return 0, io.EOF
}
// 将缓冲中数据拷贝到字节数组p中
l := copy(p, h.data)
// 缓冲中保存剩余的数据
h.data = h.data[l:]
return l, nil
}
三、tcp流
/*
* The TCP factory: returns a new Stream
*/
type tcpStreamFactory struct {
wg sync.WaitGroup
doHTTP bool
}
WaitGroup
对象内部有一个计数器,最初从0开始,
它有三个方法:Add(), Done(), Wait()
用来控制计数器的数量:
Add(n)
把计数器设置为n
,
Done()
每次把计数器-1
,
wait()
会阻塞代码的运行,直到计数器地值减为0。
四、组装器上下文
/*
* The assembler context
*/
type Context struct {
CaptureInfo gopacket.CaptureInfo
}
五、tcp流
/*
* TCP stream
*/
/* It's a connection (bidirectional双向的) */
type tcpStream struct {
tcpstate *reassembly.TCPSimpleFSM // TCPSimpleFSM implements a very simple TCP state machine(SM)
fsmerr bool
optchecker reassembly.TCPOptionCheck
net, transport gopacket.Flow
isDNS bool
isHTTP bool
reversed bool
client httpReader
server httpReader
urls []string
ident string
sync.Mutex
}
tcpStream主要提供两个方法:
一个是Accept,主要在接收到数据包时,负责时序等状态检查和checksum的检查;
一个是ReassembledSG,主要判断如果是http请求,将数据包交给httpReader进行处理;
if t.isHTTP {
if length > 0 {
if *hexdump {
Debug("Feeding http with:\n%s", hex.Dump(data))
}
if dir == reassembly.TCPDirClientToServer && !t.reversed {
t.client.bytes <- data
} else {
t.server.bytes <- data
}
}
}
今天的文章GoPacket研究——reassemblydump结构体分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65696.html