bugfix: calculate L2TPv2 offset
This commit is contained in:
@@ -728,7 +728,21 @@ static inline uint16_t get_l2tpv2_hdr_len(const char *data, uint16_t len)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return ntohs(*((uint16_t *)(data + skip_len)));
|
uint16_t offset = ntohs(*((uint16_t *)(data + skip_len)));
|
||||||
|
if (offset == 0)
|
||||||
|
{
|
||||||
|
return skip_len + 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// invalid offset
|
||||||
|
if (offset > len)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ fi
|
|||||||
# remove l7 protocol fields
|
# remove l7 protocol fields
|
||||||
function replace() {
|
function replace() {
|
||||||
file=$1
|
file=$1
|
||||||
array=(":data" ":ntp" ":rip" ":isakmp" ":esp" ":udpencap" ":sip" ":sdp" ":rtcp" ":rtp" ":ssh" ":dns" ":ssl" ":gquic" ":http-text-lines" ":http" ":msmms" ":bfd" ":ftp-data-text-lines" ":ftp" ":ssdp" ":mdns" ":radius" ":pop" ":smtp" ":rtmpt" ":bittorrent" ":oicq" ":json" ":media" ":x11" ":telnet" ":nbss:smb" ":memcache" ":rtspi" ":rdt" ":rtsp" ":nbns" ":nbdgm:smb:browser" ":lcp" ":chap" ":ipcp" ":comp_data" ":ccp" ":snmp" ":socks" ":bgp" ":eigrp" ":bootp" ":xml" ":echo" ":vssmonitoring" ":mndp" ":websocket-text-lines" ":websocket" ":image-jfif" ":png" ":pkix1implicit" ":x509sat" ":x509ce" ":pkix1explicit" ":llmnr")
|
array=(":data" ":ntp" ":rip" ":isakmp" ":esp" ":udpencap" ":sip" ":sdp" ":rtcp" ":rtp" ":ssh" ":dns" ":ssl" ":gquic" ":http-text-lines" ":http" ":msmms" ":bfd" ":ftp-data-text-lines" ":ftp" ":ssdp" ":mdns" ":radius" ":pop" ":smtp" ":rtmpt" ":bittorrent" ":oicq" ":json" ":media" ":x11" ":telnet" ":nbss:smb" ":memcache" ":rtspi" ":rdt" ":rtsp" ":nbns" ":nbdgm:smb:browser" ":lcp" ":chap" ":ipcp" ":comp_data" ":ccp" ":snmp" ":socks" ":bgp" ":eigrp" ":bootp" ":xml" ":echo" ":vssmonitoring" ":mndp" ":websocket-text-lines" ":websocket" ":image-jfif" ":png" ":pkix1implicit" ":x509sat" ":x509ce" ":pkix1explicit" ":llmnr" ":pkcs-1")
|
||||||
for key in "${array[@]}"; do
|
for key in "${array[@]}"; do
|
||||||
sed "s/$key//g" ${file} >.tmp.txt
|
sed "s/$key//g" ${file} >.tmp.txt
|
||||||
mv .tmp.txt ${file}
|
mv .tmp.txt ${file}
|
||||||
|
|||||||
@@ -15,34 +15,23 @@ static uint64_t number = 0;
|
|||||||
static int ipv6_proto_to_str(const struct packet_layer *ipv6_layer, char *buff, int size)
|
static int ipv6_proto_to_str(const struct packet_layer *ipv6_layer, char *buff, int size)
|
||||||
{
|
{
|
||||||
int used = snprintf(buff, size, "ipv6");
|
int used = snprintf(buff, size, "ipv6");
|
||||||
uint16_t skip_len = sizeof(struct ip6_hdr);
|
|
||||||
uint8_t next_hdr = ipv6_hdr_get_next_header((const struct ip6_hdr *)ipv6_layer->hdr_ptr);
|
uint8_t next_hdr = ipv6_hdr_get_next_header((const struct ip6_hdr *)ipv6_layer->hdr_ptr);
|
||||||
while (skip_len < ipv6_layer->hdr_len)
|
switch (next_hdr)
|
||||||
{
|
{
|
||||||
if (next_hdr == IPPROTO_HOPOPTS)
|
case IPPROTO_HOPOPTS:
|
||||||
{
|
used += snprintf(buff + used, size - used, ":ipv6.hopopt");
|
||||||
used += snprintf(buff + used, size - used, ":ipv6.hopopt");
|
break;
|
||||||
}
|
case IPPROTO_ROUTING:
|
||||||
else if (next_hdr == IPPROTO_ROUTING)
|
used += snprintf(buff + used, size - used, ":ipv6.routing");
|
||||||
{
|
break;
|
||||||
used += snprintf(buff + used, size - used, ":ipv6.routing");
|
case IPPROTO_AH:
|
||||||
}
|
used += snprintf(buff + used, size - used, ":ipv6.ah");
|
||||||
else if (next_hdr == IPPROTO_AH)
|
break;
|
||||||
{
|
case IPPROTO_DSTOPTS:
|
||||||
used += snprintf(buff + used, size - used, ":ipv6.ah");
|
used += snprintf(buff + used, size - used, ":ipv6.dstopts");
|
||||||
}
|
break;
|
||||||
else if (next_hdr == IPPROTO_DSTOPTS)
|
default:
|
||||||
{
|
break;
|
||||||
used += snprintf(buff + used, size - used, ":ipv6.dstopts");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ip6_ext *ext = (struct ip6_ext *)ipv6_layer->hdr_ptr + skip_len;
|
|
||||||
skip_len += ext->ip6e_len * 8 + 8;
|
|
||||||
next_hdr = ext->ip6e_nxt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return used;
|
return used;
|
||||||
@@ -73,7 +62,7 @@ static int packet_proto_to_str(const struct packet *pkt, char *buff, int size)
|
|||||||
used += snprintf(buff + used, size - used, "vlan:ethertype");
|
used += snprintf(buff + used, size - used, "vlan:ethertype");
|
||||||
break;
|
break;
|
||||||
case LAYER_TYPE_PPPOE:
|
case LAYER_TYPE_PPPOE:
|
||||||
used += snprintf(buff + used, size - used, "pppoe");
|
used += snprintf(buff + used, size - used, "pppoes:ppp");
|
||||||
break;
|
break;
|
||||||
case LAYER_TYPE_MPLS:
|
case LAYER_TYPE_MPLS:
|
||||||
used += snprintf(buff + used, size - used, "mpls");
|
used += snprintf(buff + used, size - used, "mpls");
|
||||||
|
|||||||
Reference in New Issue
Block a user