zoukankan      html  css  js  c++  java
  • nbtstat Linux版源码, 通过IP获取主机名

    nbtstat Linux版, 通过IP获取主机名/* NETBIOS name lookup tool - by eSDee of Netric (www.netric.org)
     * yeh.. i was really bored :-)
     *
     * [esdee@pant0ffel] gcc -o nbtstat nbtstat.c && ./nbtstat 10.0.0.4
     * Request sent, waiting for reply... [ctrl-c to abort]
     * Name                Type
     * ----------------------------------
     * HOEPELKO-ESPU0B <00> UNIQUE Workstation Service
     * HOEPELKO-ESPU0B <20> UNIQUE File Server Service
     * WORKGROUP       <00> GROUP  Domain Name
     * WORKGROUP       <1e> GROUP  Browser Service Elections
     * HOEPELKO-ESPU0B <03> UNIQUE Messenger Service
     * ADMINISTRATOR   <03> UNIQUE Messenger Service
     * WORKGROUP       <1d> UNIQUE Master Browser
     * ..__MSBROWSE__. <01> GROUP  Master Browser
     * MAC-addres = 00-02-a5-e1-fd-b7
     * [/home/esdee/nbtstat] */
    
    #include  <stdio.h>
    #include  <string.h>
    #include  <sys/types.h>
    #include  <sys/socket.h>
    #include  <netinet/in.h>
    #include  <netdb.h>
    #include  <unistd.h>
    
    char nbtname[]= /* netbios name packet */
    {
        0x80,0xf0,0x00,0x10,0x00,0x01,0x00,0x00,
        0x00,0x00,0x00,0x00,0x20,0x43,0x4b,0x41,
        0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
        0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
        0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
        0x41,0x41,0x41,0x41,0x41,0x00,0x00,0x21,
        0x00,0x01
    };
    
    int display();
    
    int main(int argc, char *argv[])
    {
        char temp[16];
    
        unsigned char recv[256];
        unsigned char *ptr;
    
        struct sockaddr_in server;
        struct hostent *hp;
    
        int s;
        int total;
    
        unsigned int nb_num;
        unsigned int nb_type;
    
        int i = 0;
    
        if (argc < 2) {
            fprintf(stderr, "Usage: %s <hostname>
    ", argv[0]);
            return 1;
        }
    
        if ((hp = gethostbyname(argv[1])) == NULL)  {
            fprintf(stderr,"Error: Unable to resolve %s
    ", argv[1]);
            return 1;
        }
    
        if ((s = socket(PF_INET, SOCK_DGRAM, 17)) < 0)  { /* 17 = UDP */
            perror("socket");
            return 1;
        }
    
        memset(recv,0x0, sizeof(recv));
    
        bzero((char *) &server, sizeof(server));
        bcopy(hp->h_addr, (char *) &server.sin_addr, hp->h_length);
    
        server.sin_family = hp->h_addrtype;
        server.sin_port = htons(137); /* netbios-ns */
    
        if (sendto(s, nbtname, sizeof(nbtname), 0, (struct sockaddr *) &server, sizeof(server)) < 0)  {
            perror("sendto");
            return 1;
        } else {
            fprintf(stdout, "Request sent, waiting for reply... [ctrl-c to abort]
    ");
    
            read(s, recv, sizeof(recv) - 1);
    
            fprintf(stdout,"Name                Type
    "
                           "----------------------------------
    ");
            ptr=recv+57;
             total=*(ptr - 1); /* max names */
    
            while(ptr < recv + sizeof(recv)) {
                memset(temp,0x0, sizeof(temp));
                strncpy(temp, ptr, 15);         /* copies the name into temp */
    
                ptr+=15;
                nb_num  = *ptr;
                nb_type = *(ptr + 1);
                ptr+=3;
    
                if (i==total) {          /* max names reached */
                    ptr-=19;         /* sets the pointer to the mac_addres field */
                    fprintf(stdout,"
    MAC-addres = %02x-%02x-%02x-%02x-%02x-%02x
    
    ",
                               *(ptr + 1), *(ptr + 2), *(ptr + 3),
                               *(ptr + 4), *(ptr + 5), *(ptr + 6));
                    break;
                }
    
                display(temp,nb_num,nb_type);
                i++;
            }
        }
        close(s);
        return  0;
    }
    
    int display(char *name, unsigned int number, unsigned int type)
    {
        char description[256];
        int i;
    
        memset(description, 0x0, sizeof(description));
    
        /* list taken from http://support.microsoft.com/default.aspx?scid=KB;EN-US;q163409& */
        /* 0x04 - UNIQUE */
        /* 0x80 - GROUP */
    
        switch(number) {
            case 0x00:
                if (type <= 0x80) {
                        strncpy(description, "UNIQUE Workstation Service", sizeof(description) - 1);
                } else {
                        strncpy(description, "GROUP  Domain Name", sizeof(description) - 1);
                }
                break;
            case 0x01:
                if (type <= 0x80) {
                        strncpy(description, "UNIQUE Messenger Service", sizeof(description) - 1);
                } else {
                        strncpy(description, "GROUP  Master Browser", sizeof(description) - 1);
                }
                break;
            case 0x03:
                strncpy(description, "UNIQUE Messenger Service", sizeof(description) - 1);
                break;
            case 0x06:
                strncpy(description, "UNIQUE RAS Server Service", sizeof(description) - 1);
                break;
            case 0x1b:
                strncpy(description, "UNIQUE Domain Master Browser", sizeof(description) - 1);
                break;
            case 0x1c:
                strncpy(description, "GROUP  Domain Controllers", sizeof(description) - 1);
                break;
            case 0x1d:
                strncpy(description, "UNIQUE Master Browser", sizeof(description) - 1);
                break;
            case 0x1e:
                if (type >= 0x80) strncpy(description, "GROUP  Browser Service Elections", sizeof(description) - 1);
                break;
            case 0x1F:
                strncpy(description, "UNIQUE NetDDE Service", sizeof(description) - 1);
                break;
            case 0x20:
                strncpy(description, "UNIQUE File Server Service", sizeof(description) - 1);
                break;
            case 0x21:
                strncpy(description, "UNIQUE RAS Client Service", sizeof(description) - 1);
                break;
            case 0x22:
                strncpy(description, "UNIQUE Microsoft Exchange Interchange(MSMail Connector)", sizeof(description) - 1);
                break;
            case 0x23:
                strncpy(description, "UNIQUE Microsoft Exchange Store", sizeof(description) - 1);
                break;
            case 0x24:
                strncpy(description, "UNIQUE Microsoft Exchange Directory", sizeof(description) - 1);
                break;
            case 0x30:
                strncpy(description, "UNIQUE Modem Sharing Server Service", sizeof(description) - 1);
                break;
            case 0x31:
                strncpy(description, "UNIQUE Modem Sharing Client Service", sizeof(description) - 1);
                break;
            case 0x42:
                strncpy(description, "UNIQUE Mcaffee Anti-Virus", sizeof(description) - 1);
                break;
            case 0x43:
                strncpy(description, "UNIQUE SMS Clients Remote Control", sizeof(description) - 1);
                break;
            case 0x44:
                strncpy(description, "UNIQUE SMS Administrators Remote Control Tool", sizeof(description) - 1);
                break;
            case 0x45:
                strncpy(description, "UNIQUE SMS Clients Remote Chat", sizeof(description) - 1);
                break;
            case 0x46:
                strncpy(description, "UNIQUE SMS Clients Remote Transfer", sizeof(description) - 1);
                break;
            case 0x4C:
                strncpy(description, "UNIQUE DEC Pathworks TCPIP service on Windows NT", sizeof(description) - 1);
                break;
            case 0x52:
                strncpy(description, "UNIQUE DEC Pathworks TCPIP service on Windows NT", sizeof(description) - 1);
                break;
            case 0x6a:
                strncpy(description, "UNIQUE Microsoft Exchange IMC", sizeof(description) - 1);
                break;
            case 0x87:
                strncpy(description, "UNIQUE Microsoft Exchange MTA", sizeof(description) - 1);
                break;
            case 0xbe:
                strncpy(description, "UNIQUE Network Monitor Agent", sizeof(description) - 1);
                break;
            case 0xbf:
                strncpy(description, "UNIQUE Network Monitor Application", sizeof(description) - 1);
                break;
            default:
                strncpy(description, "UNIQUE Unknown", sizeof(description) - 1);
                break;
        }
    
        for (i=0; i < strlen(name); i++) /* replaces weird chars with dots */
            if (name[i] < 31 || name[i] > 126) name[i] = '.';
    
        if (name) fprintf(stdout, "%s <%02x> %s
    ", name, number, description);
        return 0;
    
    }
  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/timssd/p/5671922.html
Copyright © 2011-2022 走看看