mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
netstack: add the gvisor2pcap binary
gvisor2pcap accepts via `--in` a gVisor log file containing packet logs. It writes to `--out` a `.pcap` file based on those logs. This makes debugging some issues much simpler than before, as rather than trawling through inscrutable text representing 20 different connections, we can import the file into tools like Wireshark that perform packet analysis, graphing, etc. PiperOrigin-RevId: 672662760
This commit is contained in:
committed by
gVisor bot
parent
2deda9ea46
commit
7a1a7e79ca
@@ -0,0 +1,40 @@
|
||||
load("//tools:defs.bzl", "go_binary", "go_test")
|
||||
|
||||
package(
|
||||
default_applicable_licenses = ["//:license"],
|
||||
licenses = ["notice"],
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "gvisor2pcap",
|
||||
srcs = [
|
||||
"main.go",
|
||||
],
|
||||
static = True,
|
||||
deps = [
|
||||
"//pkg/buffer",
|
||||
"//pkg/log",
|
||||
"//pkg/tcpip",
|
||||
"//pkg/tcpip/header",
|
||||
"//pkg/tcpip/link/sniffer",
|
||||
"//pkg/tcpip/stack",
|
||||
],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "gvisor2pcap_test",
|
||||
srcs = ["gvisor2pcap_test.go"],
|
||||
data = [
|
||||
"wget.log",
|
||||
":gvisor2pcap",
|
||||
],
|
||||
deps = [
|
||||
"//pkg/buffer",
|
||||
"//pkg/log",
|
||||
"//pkg/tcpip",
|
||||
"//pkg/tcpip/header",
|
||||
"//pkg/tcpip/link/sniffer",
|
||||
"//pkg/tcpip/stack",
|
||||
"//pkg/test/testutil",
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,189 @@
|
||||
// Copyright 2024 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package gvisor2pcap_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/buffer"
|
||||
"gvisor.dev/gvisor/pkg/log"
|
||||
"gvisor.dev/gvisor/pkg/tcpip"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/header"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/link/sniffer"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/stack"
|
||||
"gvisor.dev/gvisor/pkg/test/testutil"
|
||||
)
|
||||
|
||||
// TestGvisor2PCAP ensures that gVisor packet logs remain compatible with
|
||||
// gvisor2pcap.
|
||||
func TestGvisor2PCAP(t *testing.T) {
|
||||
tempDir := t.TempDir()
|
||||
tempIn := path.Join(tempDir, "in.log")
|
||||
in, err := os.Create(tempIn)
|
||||
if err != nil {
|
||||
t.Fatalf("couldn't create input file: %v", err)
|
||||
}
|
||||
|
||||
// Capture sniffer output.
|
||||
log.SetTarget(log.GoogleEmitter{Writer: &log.Writer{Next: in}})
|
||||
|
||||
// Run packets through the sniffer generate output.
|
||||
snfr := sniffer.New(nil)
|
||||
pkts := buildPackets()
|
||||
defer pkts.Reset()
|
||||
for _, pkt := range pkts.AsSlice() {
|
||||
snfr.DumpPacket(sniffer.DirectionRecv, pkt.NetworkProtocolNumber, pkt, nil)
|
||||
}
|
||||
for _, pkt := range pkts.AsSlice() {
|
||||
snfr.DumpPacket(sniffer.DirectionSend, pkt.NetworkProtocolNumber, pkt, nil)
|
||||
}
|
||||
|
||||
testBinary(t, tempIn, tempDir)
|
||||
}
|
||||
|
||||
func buildPackets() stack.PacketBufferList {
|
||||
// The various sizes and fields of generated packets are arbitrary.
|
||||
var pbl stack.PacketBufferList
|
||||
for _, ipGen := range []func([]byte, tcpip.TransportProtocolNumber) *stack.PacketBuffer{genIPv4, genIPv6} {
|
||||
for _, transportGen := range []func() ([]byte, tcpip.TransportProtocolNumber){genTCP, genUDP} {
|
||||
transHdr, proto := transportGen()
|
||||
pbl.PushBack(ipGen(transHdr, proto))
|
||||
}
|
||||
}
|
||||
return pbl
|
||||
}
|
||||
|
||||
func genTCP() ([]byte, tcpip.TransportProtocolNumber) {
|
||||
tcp := header.TCP(make([]byte, header.TCPMinimumSize))
|
||||
tcp.Encode(&header.TCPFields{
|
||||
SeqNum: 800,
|
||||
AckNum: 902,
|
||||
DataOffset: header.TCPMinimumSize,
|
||||
Flags: header.TCPFlagSyn,
|
||||
WindowSize: 4096,
|
||||
})
|
||||
return []byte(tcp), header.TCPProtocolNumber
|
||||
}
|
||||
|
||||
func genUDP() ([]byte, tcpip.TransportProtocolNumber) {
|
||||
udp := header.UDP(make([]byte, header.UDPMinimumSize))
|
||||
udp.Encode(&header.UDPFields{
|
||||
SrcPort: 343,
|
||||
DstPort: 2401,
|
||||
Length: uint16(len(udp)),
|
||||
Checksum: 0,
|
||||
})
|
||||
return []byte(udp), header.UDPProtocolNumber
|
||||
}
|
||||
|
||||
func genIPv4(payload []byte, proto tcpip.TransportProtocolNumber) *stack.PacketBuffer {
|
||||
pktLen := uint16(header.IPv4MinimumSize + len(payload))
|
||||
pktData := make([]byte, header.IPv4MinimumSize)
|
||||
ip := header.IPv4(pktData)
|
||||
ip.Encode(&header.IPv4Fields{
|
||||
TOS: 0,
|
||||
TotalLength: pktLen,
|
||||
ID: 1,
|
||||
Flags: 0,
|
||||
FragmentOffset: 0,
|
||||
TTL: 48,
|
||||
Protocol: uint8(proto),
|
||||
SrcAddr: tcpip.AddrFromSlice([]byte("\x01\x02\x03\x04")),
|
||||
DstAddr: tcpip.AddrFromSlice([]byte("\x05\x06\x07\x08")),
|
||||
})
|
||||
ip.SetChecksum(42)
|
||||
pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{
|
||||
Payload: buffer.MakeWithData(append(pktData, payload...)),
|
||||
})
|
||||
pkt.NetworkProtocolNumber = header.IPv4ProtocolNumber
|
||||
return pkt
|
||||
}
|
||||
|
||||
func genIPv6(payload []byte, proto tcpip.TransportProtocolNumber) *stack.PacketBuffer {
|
||||
pktData := make([]byte, header.IPv6MinimumSize)
|
||||
ip := header.IPv6(pktData)
|
||||
ip.Encode(&header.IPv6Fields{
|
||||
TrafficClass: 1,
|
||||
FlowLabel: 2,
|
||||
PayloadLength: uint16(len(payload)),
|
||||
TransportProtocol: proto,
|
||||
HopLimit: 78,
|
||||
SrcAddr: tcpip.AddrFromSlice([]byte("\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04")),
|
||||
DstAddr: tcpip.AddrFromSlice([]byte("\x05\x06\x07\x08\x05\x06\x07\x08\x05\x06\x07\x08\x05\x06\x07\x08")),
|
||||
ExtensionHeaders: header.IPv6ExtHdrSerializer{},
|
||||
})
|
||||
pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{
|
||||
Payload: buffer.MakeWithData(append(pktData, payload...)),
|
||||
})
|
||||
pkt.NetworkProtocolNumber = header.IPv6ProtocolNumber
|
||||
return pkt
|
||||
}
|
||||
|
||||
// TestGolden runs against the packet logs from `wget`. This is a larger,
|
||||
// more realistic log than we could reasonably generate ourselves.
|
||||
//
|
||||
// One way to generate a new golden is via docker configured to run `runsc`
|
||||
// with `--log-packets`. Build an image with wget and run
|
||||
// `docker run --runtime runsc wget-image wget -4 google.com`
|
||||
func TestGolden(t *testing.T) {
|
||||
tempDir := t.TempDir()
|
||||
packetLogFile, err := testutil.FindFile("tools/gvisor2pcap/wget.log")
|
||||
if err != nil {
|
||||
t.Fatalf("couldn't get log path: %v", err)
|
||||
}
|
||||
|
||||
testBinary(t, packetLogFile, tempDir)
|
||||
}
|
||||
|
||||
// allowedErrors matches output for packets that are known to be unhandled.
|
||||
var allowedErrors = regexp.MustCompile(strings.Join([]string{
|
||||
"unhandled protocol (udp|arp|icmp)",
|
||||
"IPv6 packet",
|
||||
}, "|"))
|
||||
|
||||
// testBinary runs gvisor2pcap with an input and checks that packets are either
|
||||
// handled or in the set of known unhandled packet types.
|
||||
func testBinary(t *testing.T, inputPath, outDir string) {
|
||||
// Run gvisor2pcap.
|
||||
gvisor2pcap, err := testutil.FindFile("tools/gvisor2pcap/gvisor2pcap")
|
||||
if err != nil {
|
||||
t.Fatalf("couldn't get binary: %v", err)
|
||||
}
|
||||
|
||||
tempOut := path.Join(outDir, "out.pcap")
|
||||
cmd := exec.Command(gvisor2pcap, "--out", tempOut, "--in", inputPath)
|
||||
binaryOutput, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Fatalf("couldn't start command %v: %v: %v", cmd, err, string(binaryOutput))
|
||||
}
|
||||
|
||||
// Ensure we generated an output file.
|
||||
if output, err := os.ReadFile(tempOut); err != nil {
|
||||
t.Errorf("couldn't read output file %q: %v", tempOut, err)
|
||||
} else if len(output) == 0 {
|
||||
t.Errorf("generated no output in %q", tempOut)
|
||||
}
|
||||
|
||||
for _, line := range strings.Split(string(binaryOutput), "\n") {
|
||||
if len(line) > 0 && !allowedErrors.MatchString(line) {
|
||||
t.Errorf("unexpected error output: %q", line)
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,47 @@
|
||||
I0903 14:40:00.408531 1 sniffer.go:241] send arp 192.168.9.2 (02:42:c0:a8:09:02) -> 192.168.9.1 (00:00:00:00:00:00) valid:true
|
||||
I0903 14:40:00.408684 1 sniffer.go:241] recv arp 192.168.9.1 (02:42:8c:56:45:30) -> 192.168.9.2 (02:42:c0:a8:09:02) valid:true
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.408758 1 sniffer.go:388] send udp 192.168.9.2:51688 -> 8.8.8.8:53 len:39 id:0xca32 xsum: 0xa30
|
||||
I0903 14:40:00.408784 1 sniffer.go:388] send udp 192.168.9.2:51688 -> 8.8.8.8:53 len:39 id:0x6f5e xsum: 0x2998
|
||||
I0903 14:40:00.423904 1 sniffer.go:388] recv udp 8.8.8.8:53 -> 192.168.9.2:51688 len:55 id:0x45f6 xsum: 0xbac8
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.424864 1 sniffer.go:388] recv udp 8.8.8.8:53 -> 192.168.9.2:51688 len:67 id:0xe7b5 xsum: 0x10ce
|
||||
I0903 14:40:00.426682 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:0 id:0xaa35 flags: S seqnum:4174770378 ack:0 win:29184 xsum:0xdca4 options:{MSS:1460 WS:7 TS:true TSVal:2699900017 TSEcr:0 SACKPermitted:true Flags: }
|
||||
I0903 14:40:00.429014 1 sniffer.go:388] recv tcp 142.251.46.174:80 -> 192.168.9.2:45751 len:0 id:0x0000 flags: S A seqnum:2608070130 ack:4174770379 win:65535 xsum:0x6f5c options:{MSS:1398 WS:8 TS:true TSVal:123223734 TSEcr:2699900017 SACKPermitted:true Flags: }
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.429095 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:0 id:0x0000 flags: A seqnum:4174770379 ack:2608070131 win:228 xsum:0x877a options:{TS:true TSVal:2699900019 TSEcr:123223734 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x54e, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.429414 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:125 id:0x0000 flags: PA seqnum:4174770379 ack:2608070131 win:4096 xsum:0x87f7 options:{TS:true TSVal:2699900019 TSEcr:123223734 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x54e, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.431188 1 sniffer.go:388] recv tcp 142.251.46.174:80 -> 192.168.9.2:45751 len:0 id:0x5fa7 flags: A seqnum:2608070131 ack:4174770504 win:256 xsum:0x9c6a options:{TS:true TSVal:123223736 TSEcr:2699900019 SACKBlocks:[]}
|
||||
I0903 14:40:00.449410 1 sniffer.go:388] recv tcp 142.251.46.174:80 -> 192.168.9.2:45751 len:773 id:0x5fa8 flags: PA seqnum:2608070131 ack:4174770504 win:256 xsum:0x6b7e options:{TS:true TSVal:123223754 TSEcr:2699900019 SACKBlocks:[]}
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.449478 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:0 id:0x0000 flags: A seqnum:4174770504 ack:2608070904 win:4089 xsum:0x877a options:{TS:true TSVal:2699900040 TSEcr:123223754 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x54e, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.451395 1 sniffer.go:388] send udp 192.168.9.2:42277 -> 8.8.8.8:53 len:43 id:0xed2a xsum: 0x57a6
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.451409 1 sniffer.go:388] send udp 192.168.9.2:42277 -> 8.8.8.8:53 len:43 id:0x493e xsum: 0x8354
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.468378 1 sniffer.go:388] recv udp 8.8.8.8:53 -> 192.168.9.2:42277 len:59 id:0x5c50 xsum: 0x7949
|
||||
I0903 14:40:00.470102 1 sniffer.go:388] recv udp 8.8.8.8:53 -> 192.168.9.2:42277 len:71 id:0x294b xsum: 0x6a8a
|
||||
I0903 14:40:00.471609 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:0 id:0x41e5 flags: S seqnum:2976118385 ack:0 win:29184 xsum:0xcfb5 options:{MSS:1460 WS:7 TS:true TSVal:384415447 TSEcr:0 SACKPermitted:true Flags: }
|
||||
I0903 14:40:00.472869 1 sniffer.go:388] recv tcp 142.250.189.164:80 -> 192.168.9.2:31258 len:0 id:0x0000 flags: S A seqnum:3464048916 ack:2976118386 win:65535 xsum:0x8c45 options:{MSS:1460 WS:8 TS:true TSVal:1559451869 TSEcr:384415447 SACKPermitted:true Flags: }
|
||||
I0903 14:40:00.473020 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:0 id:0x0000 flags: A seqnum:2976118386 ack:3464048917 win:228 xsum:0x1670 options:{TS:true TSVal:384415448 TSEcr:1559451869 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x58c, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.473336 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:129 id:0x0000 flags: PA seqnum:2976118386 ack:3464048917 win:4096 xsum:0x16f1 options:{TS:true TSVal:384415448 TSEcr:1559451869 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x58c, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.474499 1 sniffer.go:388] recv tcp 142.250.189.164:80 -> 192.168.9.2:31258 len:0 id:0x07a6 flags: A seqnum:3464048917 ack:2976118515 win:261 xsum:0xb989 options:{TS:true TSVal:1559451871 TSEcr:384415448 SACKBlocks:[]}
|
||||
I0903 14:40:00.517157 1 sniffer.go:388] recv tcp 142.250.189.164:80 -> 192.168.9.2:31258 len:7240 id:0x07a7 flags: PA seqnum:3464048917 ack:2976118515 win:261 xsum:0x32b8 options:{TS:true TSVal:1559451914 TSEcr:384415448 SACKBlocks:[]}
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.517212 1 sniffer.go:388] recv tcp 142.250.189.164:80 -> 192.168.9.2:31258 len:7240 id:0x07ac flags: PA seqnum:3464056157 ack:2976118515 win:261 xsum:0x32b8 options:{TS:true TSVal:1559451914 TSEcr:384415448 SACKBlocks:[]}
|
||||
I0903 14:40:00.517260 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:0 id:0x0000 flags: A seqnum:2976118515 ack:3464063397 win:3982 xsum:0x1670 options:{TS:true TSVal:384415492 TSEcr:1559451914 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x58c, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
I0903 14:40:00.518643 1 sniffer.go:388] recv tcp 142.250.189.164:80 -> 192.168.9.2:31258 len:14480 id:0x07b1 flags: PA seqnum:3464063397 ack:2976118515 win:261 xsum:0x4f00 options:{TS:true TSVal:1559451915 TSEcr:384415492 SACKBlocks:[]}
|
||||
I0903 14:40:00.518689 1 sniffer.go:388] recv tcp 142.250.189.164:80 -> 192.168.9.2:31258 len:3287 id:0x07bb flags: PA seqnum:3464077877 ack:2976118515 win:261 xsum:0x2347 options:{TS:true TSVal:1559451915 TSEcr:384415492 SACKBlocks:[]}
|
||||
I0903 14:40:00.518751 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:0 id:0x0000 flags: A seqnum:2976118515 ack:3464081164 win:3932 xsum:0x1670 options:{TS:true TSVal:384415494 TSEcr:1559451915 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x58c, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.520165 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:0 id:0x0000 flags:F A seqnum:4174770504 ack:2608070904 win:4096 xsum:0x877a options:{TS:true TSVal:2699900110 TSEcr:123223754 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x54e, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.525019 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:0 id:0x0000 flags:F A seqnum:2976118515 ack:3464081164 win:4096 xsum:0x1670 options:{TS:true TSVal:384415500 TSEcr:1559451915 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x58c, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.525363 1 sniffer.go:388] recv tcp 142.251.46.174:80 -> 192.168.9.2:45751 len:0 id:0x5fa9 flags:F A seqnum:2608070904 ack:4174770505 win:256 xsum:0x98aa options:{TS:true TSVal:123223830 TSEcr:2699900110 SACKBlocks:[]}
|
||||
I0903 14:40:00.525482 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:0 id:0x0000 flags: A seqnum:4174770505 ack:2608070905 win:4095 xsum:0x877a options:{TS:true TSVal:2699900115 TSEcr:123223754 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x54e, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.526064 1 sniffer.go:388] send tcp 192.168.9.2:45751 -> 142.251.46.174:80 len:0 id:0x0000 flags: R A seqnum:4174770505 ack:2608070905 win:0 xsum:0x877a options:{TS:true TSVal:2699900116 TSEcr:123223830 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x54e, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.526082 1 sniffer.go:388] send tcp 192.168.9.2:31258 -> 142.250.189.164:80 len:0 id:0x0000 flags: R A seqnum:2976118516 ack:3464081164 win:0 xsum:0x1670 options:{TS:true TSVal:384415501 TSEcr:1559451915 SACKBlocks:[]} gso:stack.GSO{Type:1, NeedsCsum:true, CsumOffset:0x10, MSS:0x58c, L3HdrLen:0x14, MaxSize:0x10000}
|
||||
I0903 14:40:00.425033 1 strace.go:576] [ 1: 1] wget E recvfrom(0x3 socket:[3], 0x559039f02bd0, 0x10000, 0x0, 0x7ee9163d2f80, 0x7ee9163d2f60 {length=28})
|
||||
Reference in New Issue
Block a user