• 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;
    
    }
  • 相关阅读:
    Unity3D AssetBundle相关
    [转]Unity3D新手引导开发手记
    努力多彩
    js sendBeacon
    js document.activeElement及使用
    js requestAnimationFrame
    js 1+'2' == '1'+'2'
    js scrollIntoViewIfNeeded
    汉字 3个字节
    js 浅拷贝和深拷贝
  • 原文地址:https://www.cnblogs.com/timssd/p/5671922.html
Copyright © 2020-2023  润新知