tpws: block connections to ::ffff:127.0.0.0/104

This commit is contained in:
bol-van
2021-03-19 11:33:42 +03:00
parent 94405e89c3
commit 5e1adaa348
11 changed files with 5 additions and 4 deletions

View File

@@ -76,7 +76,7 @@ bool check_local_ip(const struct sockaddr *saddr)
{
struct ifaddrs *addrs,*a;
if (saddr->sa_family==AF_INET && is_localnet((struct sockaddr_in *)saddr))
if (is_localnet(saddr))
return true;
if (getifaddrs(&addrs)<0) return false;
@@ -153,9 +153,10 @@ bool saconvmapped(struct sockaddr_storage *a)
return false;
}
bool is_localnet(const struct sockaddr_in *a)
bool is_localnet(const struct sockaddr *a)
{
return (htonl(a->sin_addr.s_addr)>>24)==127;
return a->sa_family==AF_INET && *(char*)&((struct sockaddr_in *)a)->sin_addr.s_addr==127 ||
a->sa_family==AF_INET6 && saismapped((struct sockaddr_in6 *)a) && ((struct sockaddr_in6 *)a)->sin6_addr.s6_addr[12]==127;
}
bool is_linklocal(const struct sockaddr_in6 *a)
{

View File

@@ -21,7 +21,7 @@ uint16_t saport(const struct sockaddr *sa);
// true = was converted
bool saconvmapped(struct sockaddr_storage *a);
bool is_localnet(const struct sockaddr_in *a);
bool is_localnet(const struct sockaddr *a);
bool is_linklocal(const struct sockaddr_in6* a);
bool is_private6(const struct sockaddr_in6* a);