mirror of
https://github.com/zeek/zeek.git
synced 2025-10-12 11:38:20 +00:00
Add parsing rules for IPv4/IPv6 subnet literal constants, addresses #888
This fixes specifying IPv4 subnets in IPv4-mapped-IPv6 format with a mask length relative to the 128 bits of the mapped IPv6 address.
This commit is contained in:
parent
5716545cfa
commit
46d225cc5b
10 changed files with 96 additions and 35 deletions
29
src/util.cc
29
src/util.cc
|
@ -43,6 +43,35 @@
|
|||
#include "Net.h"
|
||||
#include "Reporter.h"
|
||||
|
||||
/**
|
||||
* Return IP address without enclosing brackets and any leading 0x.
|
||||
*/
|
||||
std::string extract_ip(const std::string& i)
|
||||
{
|
||||
std::string s(skip_whitespace(i.c_str()));
|
||||
if ( s.size() > 0 && s[0] == '[' )
|
||||
s.erase(0, 1);
|
||||
if ( s.size() > 1 && s.substr(0, 2) == "0x" )
|
||||
s.erase(0, 2);
|
||||
size_t pos = 0;
|
||||
if ( (pos = s.find(']')) != std::string::npos )
|
||||
s = s.substr(0, pos);
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a subnet string, return IP address and subnet length separately.
|
||||
*/
|
||||
std::string extract_ip_and_len(const std::string& i, int* len)
|
||||
{
|
||||
size_t pos = i.find('/');
|
||||
if ( pos == std::string::npos )
|
||||
return i;
|
||||
if ( len )
|
||||
*len = atoi(i.substr(pos + 1).c_str());
|
||||
return extract_ip(i.substr(0, pos));
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes a string, unescapes all characters that are escaped as hex codes
|
||||
* (\x##) and turns them into the equivalent ascii-codes. Returns a string
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue