#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 }
|
1.3.4