summaryrefslogtreecommitdiff
path: root/decoders
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-08-21 18:40:19 +0800
committerluwenpeng <[email protected]>2024-08-21 18:53:42 +0800
commit7f96ae196a59d0db3a44e78475dce87e66ed8f1f (patch)
tree7ae9df0c9df9929025ddd5788cf486e7f9d29b05 /decoders
parent3636406c912ec2e1f015cd37867053e95dec60c8 (diff)
bugfix: http_decoder and glimpse_detector use new API get packet layer
Diffstat (limited to 'decoders')
-rw-r--r--decoders/glimpse_detector/app_l7_protocol.cpp22
-rw-r--r--decoders/http/http_decoder_utils.cpp19
2 files changed, 18 insertions, 23 deletions
diff --git a/decoders/glimpse_detector/app_l7_protocol.cpp b/decoders/glimpse_detector/app_l7_protocol.cpp
index 5bc1405..4243155 100644
--- a/decoders/glimpse_detector/app_l7_protocol.cpp
+++ b/decoders/glimpse_detector/app_l7_protocol.cpp
@@ -191,20 +191,16 @@ static void get_host_order_port(struct session *sess __unused, unsigned short *s
if(pkt && (flow_dir==FLOW_DIRECTION_C2S || flow_dir==FLOW_DIRECTION_S2C))
{
int layer_cnt=packet_get_layer_count(pkt);
- struct layer l={};
- packet_get_layer_by_idx(pkt, layer_cnt-1, &l);
- switch((int)l.proto)
+ const struct layer *layer = packet_get_layer_by_idx(pkt, layer_cnt - 1);
+ if (layer && layer->proto == LAYER_PROTO_TCP)
{
- case LAYER_PROTO_TCP:
- *sport = ntohs(l.hdr.tcp->th_sport);
- *dport = ntohs(l.hdr.tcp->th_dport);
- break;
- case LAYER_PROTO_UDP:
- *sport = ntohs(l.hdr.udp->uh_sport);
- *dport = ntohs(l.hdr.udp->uh_dport);
- break;
- default:
- break;
+ *sport = ntohs(layer->hdr.tcp->th_sport);
+ *dport = ntohs(layer->hdr.tcp->th_dport);
+ }
+ if (layer && layer->proto == LAYER_PROTO_UDP)
+ {
+ *sport = ntohs(layer->hdr.udp->uh_sport);
+ *dport = ntohs(layer->hdr.udp->uh_dport);
}
//S2C, swap sport and dport
if(flow_dir == FLOW_DIRECTION_S2C)
diff --git a/decoders/http/http_decoder_utils.cpp b/decoders/http/http_decoder_utils.cpp
index 181d592..909af13 100644
--- a/decoders/http/http_decoder_utils.cpp
+++ b/decoders/http/http_decoder_utils.cpp
@@ -287,24 +287,23 @@ void httpd_session_get_addr(const struct session *sess, struct httpd_session_add
return;
}
- struct layer pkt_layer = {};
- PACKET_FOREACH_LAYER_REVERSE(raw_pkt, pkt_layer)
+ int count = packet_get_layer_count(raw_pkt);
+ for (int i = count - 1; i >= 0; i--)
{
- if (pkt_layer.proto == LAYER_PROTO_TCP)
+ const struct layer *layer = packet_get_layer_by_idx(raw_pkt, i);
+ if (layer->proto == LAYER_PROTO_TCP)
{
- httpd_set_tcp_addr(pkt_layer.hdr.tcp, addr, fdir);
+ httpd_set_tcp_addr(layer->hdr.tcp, addr, fdir);
}
- else if (pkt_layer.proto == LAYER_PROTO_IPV4)
+ else if (layer->proto == LAYER_PROTO_IPV4)
{
- httpd_set_ipv4_addr(pkt_layer.hdr.ip4, addr, fdir);
+ httpd_set_ipv4_addr(layer->hdr.ip4, addr, fdir);
break;
}
- else if (pkt_layer.proto == LAYER_PROTO_IPV6)
+ else if (layer->proto == LAYER_PROTO_IPV6)
{
- httpd_set_ipv6_addr(pkt_layer.hdr.ip6, addr, fdir);
+ httpd_set_ipv6_addr(layer->hdr.ip6, addr, fdir);
break;
}
}
-
- return;
} \ No newline at end of file