static ngx_int_t ngx_stream_geoip_org_variable(ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data) { size_t len; char *val; ngx_stream_geoip_conf_t *gcf; gcf = ngx_stream_get_module_main_conf(s, ngx_stream_geoip_module); if (gcf->org == NULL) { goto not_found; } #if (NGX_HAVE_GEOIP_V6) val = gcf->org_v6 ? GeoIP_name_by_ipnum_v6(gcf->org, ngx_stream_geoip_addr_v6(s, gcf)) : GeoIP_name_by_ipnum(gcf->org, ngx_stream_geoip_addr(s, gcf)); #else val = GeoIP_name_by_ipnum(gcf->org, ngx_stream_geoip_addr(s, gcf)); #endif if (val == NULL) { goto not_found; } len = ngx_strlen(val); v->data = ngx_pnalloc(s->connection->pool, len); if (v->data == NULL) { ngx_free(val); return NGX_ERROR; } ngx_memcpy(v->data, val, len); v->len = len; v->valid = 1; v->no_cacheable = 0; v->not_found = 0; ngx_free(val); return NGX_OK; not_found: v->not_found = 1; return NGX_OK; }
int IpToGeo::lookUpV6(in6_addr addr, GeoInfo *pInfo) { if (m_pLocation) { switch (m_locDbType) { case GEOIP_REGION_EDITION_REV0: case GEOIP_REGION_EDITION_REV1: pInfo->m_pRegion = GeoIP_region_by_ipnum_v6(m_pLocation, addr); break; case GEOIP_COUNTRY_EDITION_V6: pInfo->m_countryId = GeoIP_id_by_ipnum_v6(m_pLocation, addr); break; } } if (m_pOrg) pInfo->m_pOrg = GeoIP_name_by_ipnum_v6(m_pOrg, addr); if (m_pIsp) pInfo->m_pIsp = GeoIP_name_by_ipnum_v6(m_pIsp, addr); if (m_pNetspeed) pInfo->m_netspeed = GeoIP_id_by_ipnum_v6(m_pNetspeed, addr); return 0; }
void Geolocation::getAS(IpAddress *addr, u_int32_t *asn, char **asname) { #ifdef HAVE_GEOIP char *rsp = NULL; struct ipAddress *ip = addr->getIP(); switch(ip->ipVersion) { case 4: if(geo_ip_asn_db) rsp = GeoIP_name_by_ipnum(geo_ip_asn_db, ntohl(ip->ipType.ipv4)); break; case 6: if(geo_ip_asn_db_v6 != NULL) { struct in6_addr *ipv6 = (struct in6_addr*)&ip->ipType.ipv6; rsp = GeoIP_name_by_ipnum_v6(geo_ip_asn_db_v6, *ipv6); } break; } if(rsp != NULL) { char *space = strchr(rsp, ' '); *asn = atoi(&rsp[2]); if(space) *asname = strdup(&space[1]); else *asname = strdup(rsp); free(rsp); return; } #endif *asn = 0, *asname = NULL; }
void geoiplookup(GeoIP * gi, char *hostname, int i) { const char *country_code; const char *country_name; const char *asnum_name; int country_id; GeoIPRecord *gir; geoipv6_t ipnum; ipnum = _GeoIP_lookupaddress_v6(hostname); if (__GEOIP_V6_IS_NULL(ipnum)) { printf("%s: can't resolve hostname ( %s )\n", GeoIPDBDescription[i], hostname); }else { #if 0 if (GEOIP_DOMAIN_EDITION_V6 == i) { domain_name = GeoIP_name_by_name_v6(gi, hostname); if (domain_name == NULL) { printf("%s: IP Address not found\n", GeoIPDBDescription[i]); }else { printf("%s: %s\n", GeoIPDBDescription[i], domain_name); } } #endif if (GEOIP_LOCATIONA_EDITION_V6 == i || GEOIP_ASNUM_EDITION_V6 == i || GEOIP_USERTYPE_EDITION_V6 == i || GEOIP_REGISTRAR_EDITION_V6 == i || GEOIP_DOMAIN_EDITION_V6 == i || GEOIP_ORG_EDITION_V6 == i || GEOIP_ISP_EDITION_V6 == i || GEOIP_NETSPEED_EDITION_REV1_V6 == i) { asnum_name = GeoIP_name_by_ipnum_v6(gi, ipnum); if (asnum_name == NULL) { printf("%s: IP Address not found\n", GeoIPDBDescription[i]); }else { printf("%s: %s\n", GeoIPDBDescription[i], asnum_name); // _say_range_by_ip(gi, ipnum); } }else if (GEOIP_CITY_EDITION_REV0_V6 == i) { gir = GeoIP_record_by_ipnum_v6(gi, ipnum); if (NULL == gir) { printf("%s: IP Address not found\n", GeoIPDBDescription[i]); }else { printf("%s: %s, %s, %s, %s, %f, %f\n", GeoIPDBDescription[i], gir->country_code, _mk_NA( gir->region), _mk_NA(gir->city), _mk_NA( gir->postal_code), gir->latitude, gir->longitude); } }else if (GEOIP_CITY_EDITION_REV1_V6 == i) { gir = GeoIP_record_by_ipnum_v6(gi, ipnum); if (NULL == gir) { printf("%s: IP Address not found\n", GeoIPDBDescription[i]); }else { printf("%s: %s, %s, %s, %s, %f, %f, %d, %d\n", GeoIPDBDescription[i], gir->country_code, _mk_NA( gir->region), _mk_NA(gir->city), _mk_NA( gir->postal_code), gir->latitude, gir->longitude, gir->metro_code, gir->area_code); } }else if (GEOIP_COUNTRY_EDITION_V6 == i) { country_id = GeoIP_id_by_ipnum_v6(gi, ipnum); country_code = GeoIP_country_code[country_id]; country_name = GeoIP_country_name[country_id]; if (country_id == 0) { printf("%s: IP Address not found\n", GeoIPDBDescription[i]); }else { printf("%s: %s, %s\n", GeoIPDBDescription[i], country_code, country_name); } } } #if 0 else if (GEOIP_REGION_EDITION_REV0 == i || GEOIP_REGION_EDITION_REV1 == i) {