aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rdp_drdynvc.c
diff options
context:
space:
mode:
authorDavid Fort <contact@hardening-consulting.com>2021-08-29 10:49:12 +0200
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-09-07 08:13:57 +0000
commit8a1649c5a5ff7c8bdf38cbf54ed5138c1773bfd7 (patch)
treed1d66e959adec3b0551b716cb104a1573ad2c2ed /epan/dissectors/packet-rdp_drdynvc.c
parenta3eafc6a5b960643977689d1a5ef8e4daf8631ff (diff)
rdpudp: dissect the RDP UDP protocol
This patch adds a dissector to analyze the RDP UDP protocol according to MS-RDPEUDP and MS-RDPEUDP2.
Diffstat (limited to 'epan/dissectors/packet-rdp_drdynvc.c')
-rw-r--r--epan/dissectors/packet-rdp_drdynvc.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/epan/dissectors/packet-rdp_drdynvc.c b/epan/dissectors/packet-rdp_drdynvc.c
index fa92d2ce1e..93f86a8891 100644
--- a/epan/dissectors/packet-rdp_drdynvc.c
+++ b/epan/dissectors/packet-rdp_drdynvc.c
@@ -16,6 +16,7 @@
#include <epan/prefs.h>
#include <epan/conversation.h>
#include "packet-rdp.h"
+#include "packet-rdpudp.h"
void proto_register_rdp_drdynvc(void);
void proto_reg_handoff_drdynvc(void);
@@ -219,6 +220,30 @@ find_channel_name_by_id(packet_info *pinfo, drdynvc_conv_info_t *dyninfo, guint3
return NULL;
}
+static gboolean
+rdp_isServerAddressTarget(packet_info *pinfo)
+{
+ conversation_t *conv;
+ rdp_conv_info_t *rdp_info;
+ rdpudp_conv_info_t *rdpudp_info;
+
+ conv = find_conversation_pinfo(pinfo, 0);
+ if (!conv)
+ return FALSE;
+
+ rdp_info = (rdp_conv_info_t *)conversation_get_proto_data(conv, proto_rdp);
+ if (rdp_info) {
+ rdp_server_address_t *server = &rdp_info->serverAddr;
+ return addresses_equal(&server->addr, &pinfo->dst) && (pinfo->destport == server->port);
+ }
+
+ rdpudp_info = (rdpudp_conv_info_t *)conversation_get_proto_data(conv, proto_rdpudp);
+ if (!rdpudp_info)
+ return FALSE;
+
+ return addresses_equal(&rdpudp_info->server_addr, &pinfo->dst) && (rdpudp_info->server_port == pinfo->destport);
+}
+
static int
dissect_rdp_drdynvc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *data _U_)