Network evidence during incident triage is volatile because sockets close, DNS answers expire, and short packet bursts disappear before a responder can rebuild the timeline. A bounded first pass on the affected Linux host preserves the live endpoints, route choice, resolver answer, and packet sample that explain what the host was trying to reach.
Keep the collection narrow enough for the incident scope. An evidence note should name the host, suspected peer, resolver, interface, capture window, and evidence location before packets are captured, so later reviewers can separate approved evidence from unrelated user traffic.
Packet captures and socket tables can expose internal addresses, hostnames, process names, and payload fragments. Store raw files in the incident evidence location, hash the files before handoff, and publish only sanitized summaries outside the response team.
Incident: INC-2026-0627-014 Affected host: workstation-07.example.net Suspect peer: 203.0.113.45 Suspect DNS name: beacon-01.example.net Resolver: 192.0.2.53 Capture window: 2026-06-27 09:10-09:20 UTC Evidence directory: /secure/incidents/INC-2026-0627-014/network
Do not expand the capture to unrelated subnets, users, or ports without incident-owner approval. Broad packet captures can collect credentials, session cookies, private hostnames, and unrelated user traffic.
$ sudo ss --tcp --udp --all --numeric --processes
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 192.0.2.40:53816 203.0.113.45:443 users:(("browser",pid=1842,fd=91))
tcp LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=716,fd=3))
udp UNCONN 0 0 192.0.2.40:5353 0.0.0.0:* users:(("systemd-resolve",pid=508,fd=15))
--all includes listening and non-listening sockets, --numeric keeps addresses and ports unmodified, and --processes records the owning process when permissions allow it. TIME-WAIT rows often have no process because the application has already closed the socket.
Related: How to show socket summary with ss
$ ip route get 203.0.113.45
203.0.113.45 via 192.0.2.1 dev eth0 src 192.0.2.40 uid 1000
cache
The dev value is the first capture interface candidate, and the src value is the local address to match against packet, firewall, proxy, and resolver logs.
Related: How to select a capture interface in tcpdump
$ dig @192.0.2.53 beacon-01.example.net A +noall +comments +answer ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49261 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; ANSWER SECTION: beacon-01.example.net. 60 IN A 203.0.113.45
Query the same resolver and record type from the alert when possible. NOERROR with an answer means the resolver can still return destination data; NXDOMAIN, SERVFAIL, or no answer changes the next evidence source.
$ sudo tcpdump --interface=eth0 -nn -c 6 'host 203.0.113.45 or host 192.0.2.53' tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 09:12:41.183421 IP 192.0.2.40.53582 > 192.0.2.53.53: 38174+ A? beacon-01.example.net. (39) 09:12:41.196908 IP 192.0.2.53.53 > 192.0.2.40.53582: 38174 1/0/0 A 203.0.113.45 (55) 09:12:42.012447 IP 192.0.2.40.53816 > 203.0.113.45.443: Flags [S], seq 3661777421, win 64240, length 0 ##### snipped ##### 6 packets captured 6 packets received by filter 0 packets dropped by kernel
The filter keeps the first capture tied to the suspected peer and resolver. A non-zero dropped by kernel count means the capture may have missed packets and should be repeated with a smaller filter, shorter window, or less busy capture point.
$ sudo tcpdump --interface=eth0 -nn -s 0 -c 50 -w incident-network.pcap 'host 203.0.113.45 or host 192.0.2.53' tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 50 packets captured 50 packets received by filter 0 packets dropped by kernel
-s 0 keeps full packet contents. Treat the pcap as sensitive evidence even when the terminal summary looks harmless.
$ tcpdump -nn -r incident-network.pcap reading from file incident-network.pcap, link-type EN10MB (Ethernet), snapshot length 262144 09:12:41.183421 IP 192.0.2.40.53582 > 192.0.2.53.53: 38174+ A? beacon-01.example.net. (39) 09:12:41.196908 IP 192.0.2.53.53 > 192.0.2.40.53582: 38174 1/0/0 A 203.0.113.45 (55) 09:12:42.012447 IP 192.0.2.40.53816 > 203.0.113.45.443: Flags [S], seq 3661777421, win 64240, length 0 ##### snipped #####
Reading the pcap confirms that the file opens and contains the expected resolver and peer traffic before it leaves the host. Add packet payload review only when the incident owner approves exposing payload bytes.
Related: How to read a saved PCAP file using tcpdump
$ sha256sum incident-network.pcap incident-network-notes.txt 8b65114de0b65037f2c9a26e9e7a6da8b4f7d3bc6e1435ce2f337ba3e11df94d incident-network.pcap 3a6de3819e6f96f8c07c99eb50724880a21f9e947af86aa3b57d80afcd665c5a incident-network-notes.txt
Keep the checksum with the evidence record so a later analyst can confirm the pcap and notes were not replaced after triage.
Incident network evidence: INC-2026-0627-014 Affected host: workstation-07.example.net, source 192.0.2.40 on eth0 Suspect peer: 203.0.113.45 over TCP/443 Resolver evidence: beacon-01.example.net A returned 203.0.113.45 from 192.0.2.53 Socket evidence: browser process held an established TCP session to 203.0.113.45:443 Packet evidence: incident-network.pcap, 50 packets captured, 0 kernel drops Integrity evidence: SHA256 hashes recorded for pcap and notes Sharing boundary: raw pcap restricted to incident responders; external summary sanitized
Open endpoint process, proxy, firewall, or EDR evidence after the network bundle identifies the source process, route, resolver answer, and packet sample.