zoukankan      html  css  js  c++  java
  • ip查询详细地址

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "j_socket.h"

    //type
    typedef enum{
    IP138,
    ITLEARNER
    }WEBTYPE;
    typedef struct __root_field__
    {
    char city[64];
    char provider[32];
    }root_location;

    typedef struct __ip138_field__
    {
    root_location root;
    }ip138_field;

    typedef struct __itlearner_field__
    {
    root_location root;
    char nation[32];
    }itlearner_field;

    typedef int (*search_handle) (char*, void*);

    typedef struct __SET_WEB__
    {
    WEBTYPE type;
    search_handle site;
    }SET_WEB;

    //function
    static int jry_search_ip138(char* ip, void* obj);
    static int jry_search_itlearner(char* ip, void* obj);
    //Variable
    static SET_WEB __g_func_web[]={\
    {IP138,jry_search_ip138},
    {ITLEARNER, jry_search_itlearner},
    };

    int jry_copy_webdata(char *src, char *start_key, char *end_key, char *dest)
    {
    char *start=NULL;
    char *end=NULL;
    do
    {
    if(!src || !start_key || !end_key || !dest)return 0;
    start=strstr(src, start_key);
    start=start+strlen(start_key);
    if(!start)break;
    end=strstr(start, end_key);
    if(!end)break;
    if(!start || !end)return 0;
    dest[end-start]=0;
    strncpy(dest, start, end-start);
    } while (0);
    return 1;
    }
    static int jry_search_ip138(char* ip, void* obj)
    {
    char *buf=NULL;
    size_t size=0;
    int iret=0;
    ip138_field *field=(ip138_field*)obj;
    char url[128]={0};

    do
    {
    if(!ip || !obj)return 0;
    sprintf(url, "%s%s%s%s", "http://www.ip138.com/","ips.asp?", "ip=", ip);

    if(SUCCESS!=jry_open_url(url, &buf, &size)){iret=0; break;}
    if(!buf)return 0;
    if(!jry_copy_webdata(buf, ">本站主数据:", "<", field->root.city)){iret=0;break;}
    if(!jry_copy_webdata(buf, ">参考数据一:", "<", field->root.provider)){iret=0;break;}
    } while (0);
    if(buf){free(buf);buf=NULL;}
    return 1;
    }

    static int jry_search_itlearner(char *ip, void* obj)
    {
    char *buf=NULL;
    size_t size=0;
    int iret=0;
    itlearner_field *field=(itlearner_field*)obj;
    char url[128]={0};


    do
    {
    if(!ip || !obj)return 0;
    sprintf(url, "%s%s%s%s", "http://ip.itlearner.com/","?", "ip=", ip);

    if(SUCCESS!=jry_open_url(url, &buf, &size)){iret=0; break;}
    if(!buf)return 0;
    if(!jry_copy_webdata(buf, ">所在区域:", "<", field->root.city)){iret=0;break;}
    if(!jry_copy_webdata(buf, ">国家:", "<", field->nation)){iret=0;break;}
    } while (0);
    if(buf){free(buf);buf=NULL;}
    return 1;
    }

    int jry_search_handle(char* ip, WEBTYPE web, void* obj)
    {
    return __g_func_web[web].site(ip, obj);
    }

    void test()
    {
    char ip[32]={0};
    __itlearner_field__ obj={0};

    //printf("%s\n", jry_get_localip(ip));
    if(!JRY_WSASTARUP())
    {
    printf("网络初始化失败\n");
    return ;
    }
    jry_search_handle(jry_get_localip(ip), ITLEARNER, &obj);
    printf("%s\t%s\t%s\n", obj.root.city, obj.root.provider, obj.nation);
    }

    int main(int arg, char **argv)
    {
    test();
    return 0;
    }

  • 相关阅读:
    Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门
    开源精神就意味着免费吗?
    是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。
    springcloud(十五):Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway
    写年终总结到底有没有意义?
    培训班出来的怎么了?
    【重磅】Spring Boot 2.1.0 权威发布
    一线大厂逃离或为新常态,大龄程序员改如何选择?
    Elastic 今日在纽交所上市,股价最高暴涨122%。
    技术人如何搭建自己的技术博客
  • 原文地址:https://www.cnblogs.com/ccmfc/p/2324913.html
Copyright © 2011-2022 走看看