设为首页 收藏本站
查看: 638|回复: 0

[经验分享] nbtstat Linux版源码, 通过IP获取主机名

[复制链接]

尚未签到

发表于 2017-7-4 20:17:07 | 显示全部楼层 |阅读模式
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>\n", argv[0]);
return 1;
}
if ((hp = gethostbyname(argv[1])) == NULL)  {
fprintf(stderr,"Error: Unable to resolve %s\n", 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]\n");
read(s, recv, sizeof(recv) - 1);
fprintf(stdout,"Name                Type\n"
"----------------------------------\n");
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,"\nMAC-addres = %02x-%02x-%02x-%02x-%02x-%02x\n\n",
*(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 < 31 || name > 126) name = '.';
if (name) fprintf(stdout, "%s <%02x> %s\n", name, number, description);
return 0;
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390767-1-1.html 上篇帖子: 优先级队列 下篇帖子: 第四章 第一个rabbitmq程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表