#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
/*
"10.*" => 0xA
"172.16.*~172.31.*" => 0xAC1
"192.168.*" => 0xC0A8
*/
bool is_inner_ip(const char *ip)
{
struct in_addr addr;
if (inet_pton(AF_INET, ip, &addr) <= 0)
{
fprintf(stderr, "invalid ip:%s\n", ip);
return false;
}
uint32_t hostip = ntohl(addr.s_addr);
fprintf(stderr, "%s %08X\n", ip, hostip);
return (hostip >> 24 == 0xA || hostip >> 20 == 0xAC1 || hostip >> 16 == 0xC0A8);
}
int main(int argc, char **argv)
{
if(argc < 2)
{
fprintf(stderr, "is_inner_ip IP\n");
return 0;
}
bool ret = is_inner_ip(argv[1]);
printf("%s %d\n", argv[1], ret);
return 0;
}