#include "./libipg.h"
Go to the source code of this file.
Functions | |
u_int32_t | ipgeo_ipa2ipn (char *ip) |
int | ipgeo_lookup (u_int32_t ipn, u_int8_t flags, ipgeo_t *ipg) |
char * | ipgeo_get_cc (ipgeo_t *ipg) |
char * | ipgeo_get_country (ipgeo_t *ipg) |
char * | ipgeo_get_region (ipgeo_t *ipg) |
char * | ipgeo_get_city (ipgeo_t *ipg) |
char * | ipgeo_get_isp (ipgeo_t *ipg) |
double | ipgeo_get_lat (ipgeo_t *ipg) |
double | ipgeo_get_long (ipgeo_t *ipg) |
Definition in file libipg_lookup.c.
|
currently we don't deal with hostnames; ip has to be dots n decimals compute first byte (256^3 * o1) compute second byte (256^2 * o2) compute third byte (256 * o3) compute fourth byte (o4) Definition at line 50 of file libipg_lookup.c.
00051 { 00052 char *p = ip; 00053 u_int32_t o1, o2, o3, o4; 00054 00056 if (!isdigit(ip[0])) 00057 { 00058 return (0); 00059 } 00060 00062 o1 = 16777216 * atol(strsep(&p, ".")); 00063 00065 o2 = 65536 * atol(strsep(&p, ".")); 00066 00068 o3 = 256 * atol(strsep(&p, ".")); 00069 00071 o4 = atol(strsep(&p, ".")); 00072 00073 return (o1 + o2 + o3 + o4); 00074 } |
|
Definition at line 77 of file libipg_lookup.c. References ipgeo_context::cc, ipgeo_context::city, ipgeo_context::country, ipgeo_context::db, IPGEO_BUF_SIZE, ipgeo_t, ipgeo_context::isp, ipgeo_context::latitude, ipgeo_context::longitude, and ipgeo_context::region.
00078 { 00079 int n; 00080 char *p, *q; 00081 u_int32_t min, max; 00082 char buf[IPGEO_BUF_SIZE]; 00083 00084 if (ipg == NULL) 00085 { 00086 return (-1); 00087 } 00088 00089 #if (LIBIPG_LIL_ENDIAN) 00090 ipn = htonl(ipn); 00091 #endif 00092 00093 /* perform a linear search through the CSV file */ 00094 for (; fgets(buf, IPGEO_BUF_SIZE - 1, ipg->db); ) 00095 { 00096 if (buf[0] == '#') 00097 { 00098 /* ignore comments */ 00099 continue; 00100 } 00101 00102 p = buf; 00103 00104 /* step over quote */ 00105 p += 1; 00106 min = strtoul(strsep(&p, ","), (char **)NULL, 10); 00107 00108 /* step over quote */ 00109 p += 1; 00110 max = strtoul(strsep(&p, ","), (char **)NULL, 10); 00111 00112 if (ipn >= min && ipn <= max) 00113 { 00114 p += 1; 00115 q = strsep(&p, ","); 00116 for (n = 0; n < sizeof(ipg->cc) - 1; n++) 00117 { 00118 if (q[n] == '"') 00119 { 00120 ipg->cc[n] = NULL; 00121 break; 00122 } 00123 ipg->cc[n] = q[n]; 00124 } 00125 00126 /* get cc */ 00127 p += 1; 00128 q = strsep(&p, ","); 00129 for (n = 0; n < sizeof(ipg->country) - 1; n++) 00130 { 00131 if (q[n] == '"') 00132 { 00133 ipg->country[n] = NULL; 00134 break; 00135 } 00136 ipg->country[n] = q[n]; 00137 } 00138 00139 /* get country */ 00140 p += 1; 00141 q = strsep(&p, ","); 00142 for (n = 0; n < sizeof(ipg->region) - 1; n++) 00143 { 00144 if (q[n] == '"') 00145 { 00146 ipg->region[n] = NULL; 00147 break; 00148 } 00149 ipg->region[n] = q[n]; 00150 } 00151 00152 /* get city */ 00153 p += 1; 00154 q = strsep(&p, ","); 00155 for (n = 0; n < sizeof(ipg->city) - 1; n++) 00156 { 00157 if (q[n] == '"') 00158 { 00159 ipg->city[n] = NULL; 00160 break; 00161 } 00162 ipg->city[n] = q[n]; 00163 } 00164 00165 /* get latitude */ 00166 p += 1; 00167 ipg->latitude = strtod(strsep(&p, ","), (char **)NULL); 00168 00169 /* get longitude */ 00170 p += 1; 00171 ipg->longitude = strtod(strsep(&p, ","), (char **)NULL); 00172 00173 /* get isp */ 00174 p += 1; 00175 q = strsep(&p, ","); 00176 for (n = 0; n < sizeof(ipg->isp) - 1; n++) 00177 { 00178 if (q[n] == '"') 00179 { 00180 ipg->isp[n] = NULL; 00181 break; 00182 } 00183 ipg->isp[n] = q[n]; 00184 } 00185 00186 rewind(ipg->db); 00187 return (1); 00188 } 00189 } 00190 /* no match */ 00191 return (0); 00192 } |
|
Returns the country code for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 195 of file libipg_lookup.c. References ipgeo_context::cc, and ipgeo_t.
|
|
Returns the country for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 205 of file libipg_lookup.c. References ipgeo_context::country, and ipgeo_t.
|
|
Returns the region for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 215 of file libipg_lookup.c. References ipgeo_t, and ipgeo_context::region.
|
|
Returns the city for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 225 of file libipg_lookup.c. References ipgeo_context::city, and ipgeo_t.
|
|
Returns the isp for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 235 of file libipg_lookup.c. References ipgeo_t, and ipgeo_context::isp.
|
|
Returns the latitude for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 245 of file libipg_lookup.c. References ipgeo_t, and ipgeo_context::latitude.
00246 { 00247 return (ipg->latitude); 00248 } |
|
Returns the longitude for the most recent ipgeo db lookup. The function must be called after a successful call to ipgeo_lookup().
Definition at line 251 of file libipg_lookup.c. References ipgeo_t, and ipgeo_context::longitude.
00252 { 00253 return (ipg->longitude); 00254 } |