Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When parsing EK JSON message that contains multiple layers of the same type, add the list as separate layers #661

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Victor-Mo
Copy link

When parsing EK JSON message that contains multiple layers of the same type, for example an RTCP packet with multiple RTCP sections. The 'rtcp' section will contain a list of rtcp sections. This has to be added as separate layers.

The JSON decoder in 'tshark_ek.py' decodes the multiple RTCP sections as a list. The EkLayer classs expects a Dict. This change will take the list and add the separate sections as separate layers. Below I have include the RAW JSON that caused the issue

{
	"timestamp": "1690967888547",
	"layers": {
		"frame": {
			"frame_frame_encap_type": "1",
			"frame_frame_time": "2023-08-02T09:18:08.547653000Z",
			"frame_frame_offset_shift": "0.000000000",
			"frame_frame_time_epoch": "1690967888.547653000",
			"frame_frame_time_delta": "0.004062000",
			"frame_frame_time_delta_displayed": "0.004062000",
			"frame_frame_time_relative": "2208.601376000",
			"frame_frame_number": "4923",
			"frame_frame_len": "126",
			"frame_frame_cap_len": "126",
			"frame_frame_marked": false,
			"frame_frame_ignored": false,
			"frame_frame_protocols": "eth:ethertype:ip:udp:rtp:rtcp"
		},
		"eth": {
			"eth_eth_dst": "6c:7e:67:00:00:00",
			"eth_eth_dst_resolved": "6c:7e:67:00:00:00",
			"eth_eth_dst_oui": "7110247",
			"eth_eth_addr": "6c:7e:67:00:00:00",
			"eth_eth_addr_resolved": "6c:7e:67:00:00:00",
			"eth_eth_addr_oui": "7110000",
			"eth_eth_dst_lg": false,
			"eth_eth_lg": false,
			"eth_eth_dst_ig": false,
			"eth_eth_ig": false,
			"eth_eth_src": "00:11:24:00:00:00",
			"eth_eth_src_resolved": "00:11:24:00:00:00",
			"eth_eth_src_oui": "4388",
			"eth_eth_src_oui_resolved": "Apple, Inc.",
			"eth_eth_addr": "00:11:24:00:00:00",
			"eth_eth_addr_resolved": "00:11:24:00:00:00",
			"eth_eth_addr_oui": "4388",
			"eth_eth_addr_oui_resolved": "Apple, Inc.",
			"eth_eth_src_lg": false,
			"eth_eth_lg": false,
			"eth_eth_src_ig": false,
			"eth_eth_ig": false,
			"eth_eth_type": "0x00000800"
		},
		"ip": {
			"ip_ip_version": "4",
			"ip_ip_hdr_len": "20",
			"ip_ip_dsfield": "0x00000088",
			"ip_ip_dsfield_dscp": "34",
			"ip_ip_dsfield_ecn": "0",
			"ip_ip_len": "112",
			"ip_ip_id": "0x00002a74",
			"ip_ip_flags": "0x00004000",
			"ip_ip_flags_rb": false,
			"ip_ip_flags_df": true,
			"ip_ip_flags_mf": false,
			"ip_ip_frag_offset": "0",
			"ip_ip_ttl": "64",
			"ip_ip_proto": "17",
			"ip_ip_checksum": "0x00004ce9",
			"ip_ip_checksum_status": "2",
			"ip_ip_src": "192.168.160.159",
			"ip_ip_addr": ["192.168.160.159", "192.168.160.167"],
			"ip_ip_src_host": "192.168.160.159",
			"ip_ip_host": ["192.168.160.159", "192.168.160.167"],
			"ip_ip_dst": "192.168.160.167",
			"ip_ip_dst_host": "192.168.160.167"
		},
		"udp": {
			"udp_udp_srcport": "5018",
			"udp_udp_dstport": "57284",
			"udp_udp_port": ["5018", "57284"],
			"udp_udp_length": "92",
			"udp_udp_checksum": "0x0000e68c",
			"udp_udp_checksum_status": "2",
			"udp_udp_stream": "1",
			"text": "Timestamps",
			"udp_udp_time_relative": "26.003036000",
			"udp_udp_time_delta": "0.004062000"
		},
		"rtcp": [{
			"rtcp_rtcp_version": "2",
			"rtcp_rtcp_padding": false,
			"rtcp_rtcp_rc": "0",
			"rtcp_rtcp_pt": "200",
			"rtcp_rtcp_length": "6",
			"rtcp_rtcp_senderssrc": "0xd77d577a",
			"rtcp_rtcp_timestamp_ntp_msw": "3899956688",
			"rtcp_rtcp_timestamp_ntp_lsw": "2577844052",
			"rtcp_rtcp_timestamp_ntp": "2023-08-02T09:18:08.600201089Z",
			"rtcp_rtcp_timestamp_rtp": "3309605720",
			"rtcp_rtcp_sender_packetcount": "2124",
			"rtcp_rtcp_sender_octetcount": "2561589"
		}, {
			"rtcp_rtcp_version": "2",
			"rtcp_rtcp_padding": false,
			"rtcp_rtcp_sc": "1",
			"rtcp_rtcp_pt": "202",
			"rtcp_rtcp_length": "8",
			"text": "Chunk 1, SSRC/CSRC 0xD77D577A",
			"rtcp_rtcp_ssrc_identifier": "0xd77d577a",
			"text": "SDES items",
			"rtcp_rtcp_sdes_type": ["1", "0"],
			"rtcp_rtcp_sdes_length": "24",
			"rtcp_rtcp_sdes_text": "[email protected]"
		}, {
			"rtcp_rtcp_version": "2",
			"rtcp_rtcp_padding": false,
			"rtcp_rtcp_rtpfb_fmt": "4",
			"rtcp_rtcp_pt": "205",
			"rtcp_rtcp_length": "4",
			"rtcp_rtcp_senderssrc": "0xd77d577a",
			"rtcp_rtcp_mediassrc": "0x00000000",
			"text": "TMMBN 1",
			"rtcp_rtcp_rtpfb_tmmbr_fci_ssrc": "0x8fa10952",
			"rtcp_rtcp_rtpfb_tmmbr_fci_exp": "3",
			"rtcp_rtcp_rtpfb_tmmbr_fci_mantissa": "116250",
			"rtcp_rtcp_rtpfb_tmmbr_fci_bitrate": "",
			"rtcp_rtcp_rtpfb_tmmbr_fci_measuredoverhead": "40",
			"rtcp_rtcp_length_check": true
		}]
	}
}

…e type, for example an RTCP packet with multiple RTCP sections. The 'rtcp' section will contain a list of rtcp sections. This has to be added as separate layers.
@chrisawad
Copy link

I have a fix here that handles this a little better and orders the layers the way it shows up in wireshark so its better when printing.

Your fix also doesn't handle lists in the raw layers, so the program will crash if you try to print that same packet.

Here's my pull request:
#677

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants