diff --git a/inspector.exe b/inspector.exe index 367a2e2..7945ac0 100644 Binary files a/inspector.exe and b/inspector.exe differ diff --git a/internal/capture/pcap_reader.go b/internal/capture/pcap_reader.go index ccc4fa5..dc5ef23 100644 --- a/internal/capture/pcap_reader.go +++ b/internal/capture/pcap_reader.go @@ -129,16 +129,18 @@ func (r *PcapReader) extractSIPPacket(packet gopacket.Packet, packetNum int) *si payloadStr := string(payload) - // Log first 200 chars to see full SIP headers - preview := payloadStr - if len(preview) > 200 { - preview = preview[:200] - } - logger.Debug("PcapReader: Packet %d full payload preview: %q", packetNum, preview) + // Log first 200 chars to see full SIP headers (only on trace/debug if needed) + /* + preview := payloadStr + if len(preview) > 200 { + preview = preview[:200] + } + logger.Debug("PcapReader: Packet %d full payload preview: %q", packetNum, preview) + */ // Check if it looks like SIP if !isSIPPayload(payloadStr) { - logger.Debug("PcapReader: Packet %d is not SIP", packetNum) + // logger.Debug("PcapReader: Packet %d is not SIP", packetNum) return nil } @@ -160,6 +162,7 @@ func (r *PcapReader) extractSIPPacket(packet gopacket.Packet, packetNum int) *si sipPacket.SourcePort = srcPort sipPacket.DestIP = dstIP sipPacket.DestPort = dstPort + sipPacket.Timestamp = packet.Metadata().Timestamp return sipPacket } diff --git a/internal/sip/parser.go b/internal/sip/parser.go index 6360606..4340fba 100644 --- a/internal/sip/parser.go +++ b/internal/sip/parser.go @@ -3,6 +3,7 @@ package sip import ( "regexp" "strings" + "time" ) // Method represents a SIP method @@ -27,6 +28,7 @@ const ( // Packet represents a parsed SIP packet type Packet struct { + Timestamp time.Time Raw string IsRequest bool Method Method diff --git a/internal/tui/model.go b/internal/tui/model.go index 1a8cad6..60ab3c5 100644 --- a/internal/tui/model.go +++ b/internal/tui/model.go @@ -635,14 +635,21 @@ func (m Model) renderCallDetail() string { if !pkt.IsRequest { arrow = "←" } - b.WriteString(fmt.Sprintf(" %d. %s %s\n", i+1, arrow, pkt.Summary())) + + // Format timestamp + ts := pkt.Timestamp.Format("15:04:05.000") + + // Detailed packet info line + b.WriteString(fmt.Sprintf(" %d. [%s] %s %s %s:%d -> %s:%d\n", + i+1, ts, arrow, pkt.Summary(), + pkt.SourceIP, pkt.SourcePort, pkt.DestIP, pkt.DestPort)) // Show SDP info if present if pkt.SDP != nil { mediaIP := pkt.SDP.GetSDPMediaIP() if mediaIP != "" { label := m.networkMap.LabelForIP(mediaIP) - b.WriteString(fmt.Sprintf(" SDP Media: %s\n", label)) + b.WriteString(fmt.Sprintf(" SDP Media: %s (%s)\n", mediaIP, label)) } } } @@ -655,17 +662,45 @@ func (m Model) renderCallDetail() string { func (m Model) renderNav() string { tabs := []string{"[1] Dashboard", "[2] Capture", "[3] Analysis", "[4] Network Map"} - var rendered []string + // Calculate tab width for even distribution + tabWidth := m.width / len(tabs) + if tabWidth < 15 { + tabWidth = 15 + } + + // Style for active and inactive tabs with fixed width + activeStyle := lipgloss.NewStyle(). + Bold(true). + Foreground(lipgloss.Color("#FFFFFF")). + Background(lipgloss.Color("#7D56F4")). + Width(tabWidth). + Align(lipgloss.Center) + + inactiveStyle := lipgloss.NewStyle(). + Foreground(lipgloss.Color("#AFAFAF")). + Background(lipgloss.Color("#282A36")). + Width(tabWidth). + Align(lipgloss.Center) + + var rendered []string for i, tab := range tabs { if View(i) == m.currentView { - rendered = append(rendered, m.styles.Active.Render(tab)) + rendered = append(rendered, activeStyle.Render(tab)) } else { - rendered = append(rendered, m.styles.Inactive.Render(tab)) + rendered = append(rendered, inactiveStyle.Render(tab)) } } - return lipgloss.JoinHorizontal(lipgloss.Top, rendered...) + "\n" + // Join tabs and add background bar + navBar := lipgloss.JoinHorizontal(lipgloss.Top, rendered...) + + // Fill remaining width with background + barStyle := lipgloss.NewStyle(). + Background(lipgloss.Color("#282A36")). + Width(m.width) + + return barStyle.Render(navBar) + "\n" } func (m Model) renderStatusBar() string { diff --git a/logs/2026-01-19_14-28-08.log b/logs/2026-01-19_14-28-08.log index 17ea06a..ab19ea0 100644 --- a/logs/2026-01-19_14-28-08.log +++ b/logs/2026-01-19_14-28-08.log @@ -173,3 +173,4 @@ [14:28:12.587] [DEBUG] PcapReader: Packet 24 detected as SIP, parsing... [14:28:12.588] [INFO] PcapReader: Found SIP packet 24: 200 e9270b7c047542ef9af488d27b82162e [14:28:12.591] [INFO] PcapReader: Finished reading. Total packets: 24, SIP packets: 24 +[14:32:56.152] [INFO] Telephony Inspector exited normally diff --git a/logs/2026-01-19_14-32-58.log b/logs/2026-01-19_14-32-58.log new file mode 100644 index 0000000..359a7ed --- /dev/null +++ b/logs/2026-01-19_14-32-58.log @@ -0,0 +1,175 @@ +[14:32:58.290] [INFO] Logger initialized: logs\2026-01-19_14-32-58.log +[14:32:58.294] [INFO] Starting Telephony Inspector +[14:33:08.977] [INFO] PcapReader: Creating reader for D:\Proyectos\telephony-inspector\data\calls.pcap +[14:33:08.981] [INFO] PcapReader: Opening file D:\Proyectos\telephony-inspector\data\calls.pcap +[14:33:08.984] [INFO] PcapReader: File opened successfully, link type: Ethernet +[14:33:08.989] [DEBUG] PcapReader: BPF filter set for SIP ports +[14:33:08.993] [DEBUG] PcapReader: Processing packet 1, layers: [0xc0007da0e0 0xc0000b83c0 0xc0007fa000 0xc00022a090] +[14:33:08.996] [DEBUG] PcapReader: Packet 1 IPv4 192.168.0.164 -> 192.168.0.162 +[14:33:09.001] [DEBUG] PcapReader: Packet 1 UDP 51416 -> 5060, payload len: 1153 +[14:33:09.002] [DEBUG] PcapReader: Packet 1 full payload preview: "INVITE sip:123456@192.168.0.162 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPjc988f0aca12d47aa900f472ea93fc0d6\r\nMax-Forwards: 70\r\nFrom: ;tag=d715109fcadd4" +[14:33:09.004] [DEBUG] isSIPPayload: Detected SIP method: INVITE +[14:33:09.006] [DEBUG] PcapReader: Packet 1 detected as SIP, parsing... +[14:33:09.008] [INFO] PcapReader: Found SIP packet 1: INVITE e06cb346194a4f9295d3a325b185912f +[14:33:09.010] [DEBUG] PcapReader: Processing packet 2, layers: [0xc0007da150 0xc0000b8500 0xc0007fa080 0xc00022a120] +[14:33:09.012] [DEBUG] PcapReader: Packet 2 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.014] [DEBUG] PcapReader: Packet 2 UDP 5060 -> 51416, payload len: 382 +[14:33:09.015] [DEBUG] PcapReader: Packet 2 full payload preview: "SIP/2.0 100 Trying\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjc988f0aca12d47aa900f472ea93fc0d6\r\nCall-ID: e06cb346194a4f9295d3a325b185912f\r\nFrom: 192.168.0.164 +[14:33:09.027] [DEBUG] PcapReader: Packet 3 UDP 5060 -> 51416, payload len: 1075 +[14:33:09.029] [DEBUG] PcapReader: Packet 3 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjc988f0aca12d47aa900f472ea93fc0d6\r\nCall-ID: e06cb346194a4f9295d3a325b185912f\r\nFrom: 192.168.0.162 +[14:33:09.040] [DEBUG] PcapReader: Packet 4 UDP 51416 -> 5060, payload len: 371 +[14:33:09.042] [DEBUG] PcapReader: Packet 4 full payload preview: "ACK sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPjf0cf112e8b5d4759a3417bc63cd5481e\r\nMax-Forwards: 70\r\nFrom: ;tag=d715109fcadd492b8f" +[14:33:09.044] [DEBUG] isSIPPayload: Detected SIP method: ACK +[14:33:09.046] [DEBUG] PcapReader: Packet 4 detected as SIP, parsing... +[14:33:09.047] [INFO] PcapReader: Found SIP packet 4: ACK e06cb346194a4f9295d3a325b185912f +[14:33:09.050] [DEBUG] PcapReader: Processing packet 5, layers: [0xc0007da2a0 0xc0000b8820 0xc0007fa200 0xc00022a2d0] +[14:33:09.051] [DEBUG] PcapReader: Packet 5 IPv4 192.168.0.164 -> 192.168.0.162 +[14:33:09.053] [DEBUG] PcapReader: Packet 5 UDP 51416 -> 5060, payload len: 870 +[14:33:09.055] [DEBUG] PcapReader: Packet 5 full payload preview: "UPDATE sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPj1453a8f281f04023b1a9d246fb587ca3\r\nMax-Forwards: 70\r\nFrom: ;tag=d715109fcadd492" +[14:33:09.057] [DEBUG] isSIPPayload: Detected SIP method: UPDATE +[14:33:09.059] [DEBUG] PcapReader: Packet 5 detected as SIP, parsing... +[14:33:09.061] [INFO] PcapReader: Found SIP packet 5: UPDATE e06cb346194a4f9295d3a325b185912f +[14:33:09.063] [DEBUG] PcapReader: Processing packet 6, layers: [0xc001084000 0xc000c320a0 0xc001086000 0xc001088000] +[14:33:09.065] [DEBUG] PcapReader: Packet 6 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.066] [DEBUG] PcapReader: Packet 6 UDP 5060 -> 51416, payload len: 939 +[14:33:09.068] [DEBUG] PcapReader: Packet 6 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPj1453a8f281f04023b1a9d246fb587ca3\r\nCall-ID: e06cb346194a4f9295d3a325b185912f\r\nFrom: 192.168.0.162 +[14:33:09.080] [DEBUG] PcapReader: Packet 7 UDP 51416 -> 5060, payload len: 400 +[14:33:09.082] [DEBUG] PcapReader: Packet 7 full payload preview: "BYE sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPj15f5d8bca6884d6794f27c43437f1201\r\nMax-Forwards: 70\r\nFrom: ;tag=d715109fcadd492b8f" +[14:33:09.083] [DEBUG] isSIPPayload: Detected SIP method: BYE +[14:33:09.085] [DEBUG] PcapReader: Packet 7 detected as SIP, parsing... +[14:33:09.087] [INFO] PcapReader: Found SIP packet 7: BYE e06cb346194a4f9295d3a325b185912f +[14:33:09.089] [DEBUG] PcapReader: Processing packet 8, layers: [0xc0010840e0 0xc000c321e0 0xc001086100 0xc001088120] +[14:33:09.091] [DEBUG] PcapReader: Packet 8 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.092] [DEBUG] PcapReader: Packet 8 UDP 5060 -> 51416, payload len: 416 +[14:33:09.094] [DEBUG] PcapReader: Packet 8 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPj15f5d8bca6884d6794f27c43437f1201\r\nCall-ID: e06cb346194a4f9295d3a325b185912f\r\nFrom: 192.168.0.162 +[14:33:09.109] [DEBUG] PcapReader: Packet 9 UDP 51416 -> 5060, payload len: 1160 +[14:33:09.112] [DEBUG] PcapReader: Packet 9 full payload preview: "INVITE sip:962791077@192.168.0.162 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPj25f0f67dd6cb411ab3b6d48b1c0f9ca9\r\nMax-Forwards: 70\r\nFrom: ;tag=820adc6fe0" +[14:33:09.114] [DEBUG] isSIPPayload: Detected SIP method: INVITE +[14:33:09.115] [DEBUG] PcapReader: Packet 9 detected as SIP, parsing... +[14:33:09.117] [INFO] PcapReader: Found SIP packet 9: INVITE a15e53524b304ebf9dd16209f9c95d18 +[14:33:09.119] [DEBUG] PcapReader: Processing packet 10, layers: [0xc0010841c0 0xc000c32320 0xc001086200 0xc001088240] +[14:33:09.121] [DEBUG] PcapReader: Packet 10 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.122] [DEBUG] PcapReader: Packet 10 UDP 5060 -> 51416, payload len: 385 +[14:33:09.124] [DEBUG] PcapReader: Packet 10 full payload preview: "SIP/2.0 100 Trying\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPj25f0f67dd6cb411ab3b6d48b1c0f9ca9\r\nCall-ID: a15e53524b304ebf9dd16209f9c95d18\r\nFrom: 192.168.0.164 +[14:33:09.135] [DEBUG] PcapReader: Packet 11 UDP 5060 -> 51416, payload len: 1078 +[14:33:09.137] [DEBUG] PcapReader: Packet 11 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPj25f0f67dd6cb411ab3b6d48b1c0f9ca9\r\nCall-ID: a15e53524b304ebf9dd16209f9c95d18\r\nFrom: 192.168.0.162 +[14:33:09.148] [DEBUG] PcapReader: Packet 12 UDP 51416 -> 5060, payload len: 374 +[14:33:09.150] [DEBUG] PcapReader: Packet 12 full payload preview: "ACK sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPj70a4a90d59254a4885b807deca2166fc\r\nMax-Forwards: 70\r\nFrom: ;tag=820adc6fe0694f93bc" +[14:33:09.152] [DEBUG] isSIPPayload: Detected SIP method: ACK +[14:33:09.154] [DEBUG] PcapReader: Packet 12 detected as SIP, parsing... +[14:33:09.156] [INFO] PcapReader: Found SIP packet 12: ACK a15e53524b304ebf9dd16209f9c95d18 +[14:33:09.158] [DEBUG] PcapReader: Processing packet 13, layers: [0xc001084310 0xc000c32500 0xc001086380 0xc0010883f0] +[14:33:09.159] [DEBUG] PcapReader: Packet 13 IPv4 192.168.0.164 -> 192.168.0.162 +[14:33:09.161] [DEBUG] PcapReader: Packet 13 UDP 51416 -> 5060, payload len: 874 +[14:33:09.163] [DEBUG] PcapReader: Packet 13 full payload preview: "UPDATE sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPjda3c200bd4664b39b5d59177c5f53017\r\nMax-Forwards: 70\r\nFrom: ;tag=820adc6fe0694f9" +[14:33:09.165] [DEBUG] isSIPPayload: Detected SIP method: UPDATE +[14:33:09.167] [DEBUG] PcapReader: Packet 13 detected as SIP, parsing... +[14:33:09.169] [INFO] PcapReader: Found SIP packet 13: UPDATE a15e53524b304ebf9dd16209f9c95d18 +[14:33:09.171] [DEBUG] PcapReader: Processing packet 14, layers: [0xc001084380 0xc000c325a0 0xc001086400 0xc001088480] +[14:33:09.173] [DEBUG] PcapReader: Packet 14 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.175] [DEBUG] PcapReader: Packet 14 UDP 5060 -> 51416, payload len: 942 +[14:33:09.176] [DEBUG] PcapReader: Packet 14 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjda3c200bd4664b39b5d59177c5f53017\r\nCall-ID: a15e53524b304ebf9dd16209f9c95d18\r\nFrom: 192.168.0.162 +[14:33:09.187] [DEBUG] PcapReader: Packet 15 UDP 51416 -> 5060, payload len: 403 +[14:33:09.189] [DEBUG] PcapReader: Packet 15 full payload preview: "BYE sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPjcca874595f7840409818bf98eb6f7629\r\nMax-Forwards: 70\r\nFrom: ;tag=820adc6fe0694f93bc" +[14:33:09.191] [DEBUG] isSIPPayload: Detected SIP method: BYE +[14:33:09.193] [DEBUG] PcapReader: Packet 15 detected as SIP, parsing... +[14:33:09.195] [INFO] PcapReader: Found SIP packet 15: BYE a15e53524b304ebf9dd16209f9c95d18 +[14:33:09.197] [DEBUG] PcapReader: Processing packet 16, layers: [0xc001084460 0xc000c326e0 0xc001086500 0xc0010885a0] +[14:33:09.199] [DEBUG] PcapReader: Packet 16 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.201] [DEBUG] PcapReader: Packet 16 UDP 5060 -> 51416, payload len: 419 +[14:33:09.202] [DEBUG] PcapReader: Packet 16 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjcca874595f7840409818bf98eb6f7629\r\nCall-ID: a15e53524b304ebf9dd16209f9c95d18\r\nFrom: 192.168.0.162 +[14:33:09.214] [DEBUG] PcapReader: Packet 17 UDP 51416 -> 5060, payload len: 1150 +[14:33:09.215] [DEBUG] PcapReader: Packet 17 full payload preview: "INVITE sip:3333@192.168.0.162 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPjb6b83a62e76f41c58fe9b71e82af61a5\r\nMax-Forwards: 70\r\nFrom: ;tag=c2ffb0450ac24fb" +[14:33:09.217] [DEBUG] isSIPPayload: Detected SIP method: INVITE +[14:33:09.219] [DEBUG] PcapReader: Packet 17 detected as SIP, parsing... +[14:33:09.221] [INFO] PcapReader: Found SIP packet 17: INVITE e9270b7c047542ef9af488d27b82162e +[14:33:09.223] [DEBUG] PcapReader: Processing packet 18, layers: [0xc001084540 0xc000c32820 0xc001086600 0xc0010886c0] +[14:33:09.225] [DEBUG] PcapReader: Packet 18 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.227] [DEBUG] PcapReader: Packet 18 UDP 5060 -> 51416, payload len: 380 +[14:33:09.228] [DEBUG] PcapReader: Packet 18 full payload preview: "SIP/2.0 100 Trying\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjb6b83a62e76f41c58fe9b71e82af61a5\r\nCall-ID: e9270b7c047542ef9af488d27b82162e\r\nFrom: 192.168.0.164 +[14:33:09.239] [DEBUG] PcapReader: Packet 19 UDP 5060 -> 51416, payload len: 1073 +[14:33:09.242] [DEBUG] PcapReader: Packet 19 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjb6b83a62e76f41c58fe9b71e82af61a5\r\nCall-ID: e9270b7c047542ef9af488d27b82162e\r\nFrom: 192.168.0.162 +[14:33:09.252] [DEBUG] PcapReader: Packet 20 UDP 51416 -> 5060, payload len: 369 +[14:33:09.255] [DEBUG] PcapReader: Packet 20 full payload preview: "ACK sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPj1ec8fc81ae324187a6feecaf02f04ff1\r\nMax-Forwards: 70\r\nFrom: ;tag=c2ffb0450ac24fb098" +[14:33:09.256] [DEBUG] isSIPPayload: Detected SIP method: ACK +[14:33:09.258] [DEBUG] PcapReader: Packet 20 detected as SIP, parsing... +[14:33:09.260] [INFO] PcapReader: Found SIP packet 20: ACK e9270b7c047542ef9af488d27b82162e +[14:33:09.262] [DEBUG] PcapReader: Processing packet 21, layers: [0xc001084690 0xc000c32a00 0xc001086780 0xc001088870] +[14:33:09.263] [DEBUG] PcapReader: Packet 21 IPv4 192.168.0.164 -> 192.168.0.162 +[14:33:09.265] [DEBUG] PcapReader: Packet 21 UDP 51416 -> 5060, payload len: 869 +[14:33:09.268] [DEBUG] PcapReader: Packet 21 full payload preview: "UPDATE sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPja17c7b2ea9da425d85da051e336794c9\r\nMax-Forwards: 70\r\nFrom: ;tag=c2ffb0450ac24fb" +[14:33:09.269] [DEBUG] isSIPPayload: Detected SIP method: UPDATE +[14:33:09.271] [DEBUG] PcapReader: Packet 21 detected as SIP, parsing... +[14:33:09.273] [INFO] PcapReader: Found SIP packet 21: UPDATE e9270b7c047542ef9af488d27b82162e +[14:33:09.275] [DEBUG] PcapReader: Processing packet 22, layers: [0xc001084700 0xc000c32aa0 0xc001086800 0xc001088900] +[14:33:09.277] [DEBUG] PcapReader: Packet 22 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.278] [DEBUG] PcapReader: Packet 22 UDP 5060 -> 51416, payload len: 937 +[14:33:09.280] [DEBUG] PcapReader: Packet 22 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPja17c7b2ea9da425d85da051e336794c9\r\nCall-ID: e9270b7c047542ef9af488d27b82162e\r\nFrom: 192.168.0.162 +[14:33:09.291] [DEBUG] PcapReader: Packet 23 UDP 51416 -> 5060, payload len: 398 +[14:33:09.293] [DEBUG] PcapReader: Packet 23 full payload preview: "BYE sip:192.168.0.162:5060 SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport;branch=z9hG4bKPjc372eee10c754ece9a873f8e36a6a0e2\r\nMax-Forwards: 70\r\nFrom: ;tag=c2ffb0450ac24fb098" +[14:33:09.295] [DEBUG] isSIPPayload: Detected SIP method: BYE +[14:33:09.297] [DEBUG] PcapReader: Packet 23 detected as SIP, parsing... +[14:33:09.299] [INFO] PcapReader: Found SIP packet 23: BYE e9270b7c047542ef9af488d27b82162e +[14:33:09.301] [DEBUG] PcapReader: Processing packet 24, layers: [0xc0010847e0 0xc000c32be0 0xc001086900 0xc001088a20] +[14:33:09.303] [DEBUG] PcapReader: Packet 24 IPv4 192.168.0.162 -> 192.168.0.164 +[14:33:09.304] [DEBUG] PcapReader: Packet 24 UDP 5060 -> 51416, payload len: 414 +[14:33:09.306] [DEBUG] PcapReader: Packet 24 full payload preview: "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.0.164:51416;rport=51416;received=192.168.0.164;branch=z9hG4bKPjc372eee10c754ece9a873f8e36a6a0e2\r\nCall-ID: e9270b7c047542ef9af488d27b82162e\r\nFrom: