FSSO: add support of packet with extra IPv4 a the end of packet

This commit is contained in:
Alexis La Goutte 2022-07-04 11:56:10 +02:00 committed by A Wireshark GitLab Utility
parent 206e600687
commit 9781ae3fc1
1 changed files with 45 additions and 35 deletions

View File

@ -107,51 +107,61 @@ dissect_fortinet_sso(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
offset += (string_length);
}
if(tvb_reported_length_remaining(tvb, offset)) {
guint16 value;
guint32 number_port_range;
value = tvb_get_ntohs(tvb, offset);
if(tvb_reported_length_remaining(tvb, offset) == 4) {
if(value == 0x2002) { /* Not a TS Agent additionnal Data */
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 2, ENC_NA);
offset += 2;
/* There is some packet with extra IPv4 address... */
proto_tree_add_item(fsso_tree, hf_fsso_unknown_ipv4, tvb, offset, 4, ENC_NA);
offset += 4;
proto_tree_add_item(fsso_tree, hf_fsso_unknown_ipv4, tvb, offset, 4, ENC_NA);
offset += 4;
} else {
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 6, ENC_NA);
offset += 6;
if(tvb_reported_length_remaining(tvb, offset)) {
guint16 value;
guint32 number_port_range;
value = tvb_get_ntohs(tvb, offset);
proto_tree_add_item(fsso_tree, hf_fsso_unknown_ipv4, tvb, offset, 4, ENC_NA);
offset += 4;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 1, ENC_NA);
offset += 1;
} else {
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 15, ENC_NA);
offset += 15;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 5, ENC_NA);
offset += 5;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 6, ENC_NA);
offset += 6;
/* Port Range assigned to user for TS Agent (RDP/Citrix) */
proto_tree_add_item_ret_uint(fsso_tree, hf_fsso_tsagent_number_port_range, tvb, offset, 2, ENC_BIG_ENDIAN, &number_port_range);
offset += 2;
while (number_port_range) {
proto_tree_add_item(fsso_tree, hf_fsso_tsagent_port_range_min, tvb, offset, 2, ENC_BIG_ENDIAN);
if(value == 0x2002) { /* Not a TS Agent additionnal Data */
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 2, ENC_NA);
offset += 2;
proto_tree_add_item(fsso_tree, hf_fsso_tsagent_port_range_max, tvb, offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item(fsso_tree, hf_fsso_unknown_ipv4, tvb, offset, 4, ENC_NA);
offset += 4;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 6, ENC_NA);
offset += 6;
proto_tree_add_item(fsso_tree, hf_fsso_unknown_ipv4, tvb, offset, 4, ENC_NA);
offset += 4;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 1, ENC_NA);
offset += 1;
} else {
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 15, ENC_NA);
offset += 15;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 5, ENC_NA);
offset += 5;
proto_tree_add_item(fsso_tree, hf_fsso_unknown, tvb, offset, 6, ENC_NA);
offset += 6;
/* Port Range assigned to user for TS Agent (RDP/Citrix) */
proto_tree_add_item_ret_uint(fsso_tree, hf_fsso_tsagent_number_port_range, tvb, offset, 2, ENC_BIG_ENDIAN, &number_port_range);
offset += 2;
number_port_range --;
while (number_port_range) {
proto_tree_add_item(fsso_tree, hf_fsso_tsagent_port_range_min, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(fsso_tree, hf_fsso_tsagent_port_range_max, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
number_port_range --;
}
}
}
}
return offset;