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;
}
Exemple #4
0
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) {