`
cloudmail
  • 浏览: 270995 次
  • 来自: 广州
社区版块
存档分类
最新评论

C 语言执行 whois 查询

 
阅读更多
http://www.binarytides.com/c-code-to-perform-ip-whois/
http://www.oschina.net/code/snippet_12_9390
 
 
 
/*
 * @brief
 * Whois client program
 *
 * @details
 * This program shall fetch whois data for a IPv4 address.
 *
 * @author Silver Moon ( m00n.silv3r@gmail.com )
 * */
 
#include<stdio.h> //scanf , printf
#include<string.h>    //strtok
#include<stdlib.h>    //realloc
#include<sys/socket.h>    //socket
#include<netinet/in.h> //sockaddr_in
#include<arpa/inet.h> //getsockname
#include<netdb.h> //hostent
#include<unistd.h>    //close
 
int main(int argc , char *argv[])
{
    char ip[100] , *data = NULL;
     
    printf("Enter ip address to whois : ");
    scanf("%s" , ip);
     
    get_whois(ip , &data);
    printf("\n\n");
    puts(data);
     
    free(data);
    return 0;
}
 
/**
    Get the whois content of an ip
    by selecting the correct server
*/
void get_whois(char *ip , char **data)
{
    char *wch = NULL, *pch , *response = NULL;
     
    if(whois_query("whois.iana.org" , ip , &response))
    {
        printf("Whois query failed");
    }
     
    pch = strtok(response , "\n");
     
    while(pch != NULL)
    {
        //Check if whois line
        wch = strstr(pch , "whois.");
        if(wch != NULL)
        {
            break;
        }
 
        //Next line please
        pch = strtok(NULL , "\n");
    }
     
    if(wch != NULL)
    {
        printf("\nWhois server is : %s" , wch);
        whois_query(wch , ip , data);
    }
    else
    {
        *data = malloc(100);
        strcpy(*data , "No whois data");
    }
     
    return;
}
 
/*
 * Perform a whois query to a server and record the response
 * */
int whois_query(char *server , char *query , char **response)
{
    char ip[32] , message[100] , buffer[1500];
    int sock , read_size , total_size = 0;
    struct sockaddr_in dest;
      
    sock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
      
    //Prepare connection structures :)
    memset( &dest , 0 , sizeof(dest) );
    dest.sin_family = AF_INET;
      
    printf("\nResolving %s..." , server);
    if(hostname_to_ip(server , ip))
    {
        printf("Failed");
        return 1;
    }
    printf("%s" , ip);   
    dest.sin_addr.s_addr = inet_addr( ip );
    dest.sin_port = htons( 43 );
 
    //Now connect to remote server
    if(connect( sock , (const struct sockaddr*) &dest , sizeof(dest) ) < 0)
    {
        perror("connect failed");
    }
     
    //Now send some data or message
    printf("\nQuerying for ... %s ..." , query);
    sprintf(message , "%s\r\n" , query);
    if( send(sock , message , strlen(message) , 0) < 0)
    {
        perror("send failed");
    }
     
    //Now receive the response
    while( (read_size = recv(sock , buffer , sizeof(buffer) , 0) ) )
    {
        *response = realloc(*response , read_size + total_size);
        if(*response == NULL)
        {
            printf("realloc failed");
        }
        memcpy(*response + total_size , buffer , read_size);
        total_size += read_size;
    }
    printf("Done");
    fflush(stdout);
     
    *response = realloc(*response , total_size + 1);
    *(*response + total_size) = '\0';
     
    close(sock);
    return 0;
}
 
/*
 * @brief
 * Get the ip address of a given hostname
 *
 * */
int hostname_to_ip(char * hostname , char* ip)
{
    struct hostent *he;
    struct in_addr **addr_list;
    int i;
         
    if ( (he = gethostbyname( hostname ) ) == NULL)
    {
        // get the host info
        herror("gethostbyname");
        return 1;
    }
 
    addr_list = (struct in_addr **) he->h_addr_list;
     
    for(i = 0; addr_list[i] != NULL; i++)
    {
        //Return the first one;
        strcpy(ip , inet_ntoa(*addr_list[i]) );
        return 0;
    }
     
    return 0;
}
分享到:
评论
1 楼 cloudmail 2014-03-20  
1,telnet whois.iana.org 43
2,发送待查询的域名,比如163.com
3,逐行解析返回的结果,提取 refer: 字段获得一个地址,如whois.verisign-grs.com
4,telnet whois.verisign-grs.com 43
5,发送待查询的域名,如163.com
6,这时就拿到域名的注册信息了

相关推荐

    qqnc.cc域名WHOIS查询系统显示记录版 v1.0.rar

    1. `c.asp`:这是系统的核心组件,很可能包含了处理WHOIS查询请求的代码。通过输入域名,系统将调用这个页面来执行查询并返回结果。 2. `index.asp`:作为系统的主页,它通常会提供一个用户界面,让用户输入域名...

    c-net.rar_LINUX NET_ftp linux_linux FTP客户端_whois

    在Linux中,`whois`命令可以用来执行WHOIS查询。这个资源包可能提供了一个定制的WHOIS查询工具,或者是一些有关如何在Linux环境下使用WHOIS查询的教程。 压缩包内的“www.pudn.com.txt”可能是一个链接或说明文档,...

    国际域名穷举查询

    在这个案例中,可能包含处理Whois查询的网络请求和响应的类。 6. **资源文件**:如Pwhois.cfg可能是配置文件,存储程序的设置,如查询参数、线程数量等;cMain.ddp、cMain.dfm可能是Delphi(一种编程语言)的项目...

    国家标志和IP Whois「Country Flags & IP Whois」-crx插件

    5. DNS查找:执行权威的DNS查找6. Whois查找:查找域名的注册和委派7. HTTP标头:列出所有响应HTTP标头8.复制IP:复制IP剪贴板上的地址9. Alexa:网站流量,统计和分析10. WOT记分卡:网站信誉等级11.病毒总数:免费...

    网络安全的侦测和工具.pdf

    通过Whois查询,可以获取到域名服务器的详情,进一步使用DNS的排错工具nslookup,可以伪装成次要DNS服务器请求区域传送,从而获取更多网络信息,包括主机名、IP地址、网络结构和主机用途。 Host命令是UNIX系统中...

    metasploit读书笔记

    1. **Whois查询**:通过 `msf&gt; whois example.com` 或 `msf&gt; whois 192.168.1.100` 来查询域名或IP的信息。 2. **Netcraft**:使用在线工具 `http://searchdns.netcraft.com/` 来收集服务器IP信息。 3. **NSLOOKUP**...

    DHDb:Shell脚本-GitHub操作-DHDb

    综上所述,DHDb是一个利用Shell脚本与GitHub交互的工具,通过GitHub Actions实现自动化,包括但不限于使用WHOIS查询、DNS-over-HTTPS进行域名和主机的健康检查,以及根据地区(国内与国外)进行差异化处理。...

    INICIANDO SUA CARREIRA EM PENTEST.pdf

    5. **信息收集与枚举**:通过搜索引擎、社会工程、WHOIS查询等方法收集目标信息,为后续的扫描和分析做准备。 6. **扫描方法**:使用Nmap、ZAP等工具进行端口扫描、服务识别、操作系统指纹识别等,找出网络中的活体...

    第十六节 unicode绕过过滤触发XSS-01

    Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 在Python中,可以使用Unicode类型来表示字符。...

    linux命令大全

    - 如果本地语言环境不是utf8而是gb18030,可以使用: `mount -o iocharset=gb2312 /dev/sda1 /mnt/usb` - 挂载光盘镜像: `mount -t iso9660 -o loop /tmp/cd.iso /mnt/cdrom` 7. **字符界面下安装操作系统** - `...

    linux常用命令整理

    - 如果本地语言环境是GB18030,可以使用以下命令:`# mount -o iocharset=gb2312 /dev/sda1 /mnt/usb` - 挂载光盘镜像到本地目录:`# mount -t iso9660 -o loop /tmp/cd.iso /mnt/cdrom` 9. **字符界面下安装操作...

    linux扫盲学习

    - 如果本地语言环境不是UTF8而是GB18030,则需使用下面的命令挂载:`#mount -o iocharset=gb2312 /dev/sda1 /mnt/usb` - 挂载一个光盘镜像至本地`/mnt/cdrom`目录:`#mount -t iso9660 -o loop /tmp/cd.iso /mnt/...

    linux命令大全.doc

    - `-c`: 取消正在执行的关机操作。 - **示例**: - `#shutdown -k now "just kid"`: 发出警告信息“just kid”,但不实际关机。 - `#shutdown -h now`: 立即关机并关闭电源。 - `#shutdown -r now`: 立即重启...

    OpenSRS Client Software-开源

    2. **域名注册与管理**:理解域名注册和管理的过程是IT行业中的基础技能,涉及到DNS(Domain Name System)解析、WHOIS查询、域名生命周期(如注册、续费、锁定、转移)等概念。 3. **开源文化**:OpenSRS Client ...

    linux终端命令

    - `whois`: 查询域名和IP地址的相关信息。 - `whatis`: 显示命令的简短描述。 - `whereis`: 显示系统命令的位置及其手册页位置。 以上命令涵盖了Linux终端中常用的安装、登录、关机、文件系统管理以及系统信息显示...

    TCP/IP协议 port

    端口43 - Whois (Whois查询服务) - **描述**:用于查询注册信息的协议。 ##### 44. 端口44 - MPM FLAGS Protocol (消息处理模块标志协议) - **描述**:用于消息处理的应用层协议。 ##### 45. 端口45 - Message ...

    x-scan-v3.3-cn

    Domain 集WHOIS查询、上传页面批量检测、木马上传、数据库浏览及加密解密于一体. SuperScan 强大的TCP端口扫描器、Ping和域名解析器! Hscan 这是款运行在WinNT/2000下的漏洞扫描工具,有GUI以及命令行两种扫描方式...

Global site tag (gtag.js) - Google Analytics