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[])
{
];
unsigned ];
unsigned char *ptr;
struct sockaddr_in server;
struct hostent *hp;
int s;
int total;
unsigned int nb_num;
unsigned int nb_type;
;
) {
fprintf(stderr, ]);
;
}
])) == NULL) {
fprintf(stderr,]);
;
}
)) < ) { /* 17 = UDP */
perror("socket");
;
}
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(); /* netbios-ns */
, () {
perror("sendto");
;
} else {
fprintf(stdout, "Request sent, waiting for reply... [ctrl-c to abort]\n");
read(s, recv, );
fprintf(stdout,"Name Type\n"
"----------------------------------\n");
ptr=recv+;
total=*(ptr - ); /* max names */
while(ptr < recv + sizeof(recv)) {
memset(temp,0x0, sizeof(temp));
strncpy(temp, ptr, ); /* copies the name into temp */
ptr+=;
nb_num = *ptr;
nb_type = *(ptr + );
ptr+=;
if (i==total) { /* max names reached */
ptr-=; /* sets the pointer to the mac_addres field */
fprintf(stdout,"\nMAC-addres = %02x-%02x-%02x-%02x-%02x-%02x\n\n",
*(ptr + ), *(ptr + ), *(ptr + ),
*(ptr + ), *(ptr + ), *(ptr + ));
break;
}
display(temp,nb_num,nb_type);
i++;
}
}
close(s);
;
}
int display(char *name, unsigned int number, unsigned int type)
{
];
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, );
} else {
strncpy(description, );
}
break;
case 0x01:
if (type <= 0x80) {
strncpy(description, );
} else {
strncpy(description, );
}
break;
case 0x03:
strncpy(description, );
break;
case 0x06:
strncpy(description, );
break;
case 0x1b:
strncpy(description, );
break;
case 0x1c:
strncpy(description, );
break;
case 0x1d:
strncpy(description, );
break;
case 0x1e:
);
break;
case 0x1F:
strncpy(description, );
break;
case 0x20:
strncpy(description, );
break;
case 0x21:
strncpy(description, );
break;
case 0x22:
strncpy(description, );
break;
case 0x23:
strncpy(description, );
break;
case 0x24:
strncpy(description, );
break;
case 0x30:
strncpy(description, );
break;
case 0x31:
strncpy(description, );
break;
case 0x42:
strncpy(description, );
break;
case 0x43:
strncpy(description, );
break;
case 0x44:
strncpy(description, );
break;
case 0x45:
strncpy(description, );
break;
case 0x46:
strncpy(description, );
break;
case 0x4C:
strncpy(description, );
break;
case 0x52:
strncpy(description, );
break;
case 0x6a:
strncpy(description, );
break;
case 0x87:
strncpy(description, );
break;
case 0xbe:
strncpy(description, );
break;
case 0xbf:
strncpy(description, );
break;
default:
strncpy(description, );
break;
}
; i < strlen(name); i++) /* replaces weird chars with dots */
|| name[i] > ) name[i] = '.';
if (name) fprintf(stdout, "%s <%02x> %s\n", name, number, description);
;
}
nbtstat Linux版源码, 通过IP获取主机名的更多相关文章
- Linux 从源码编译安装 OpenSSH
https://blog.csdn.net/bytxl/article/details/46639073 Linux 从源码编译安装 OpenSSH以及各问题解决 2015年06月25日 17:37: ...
- linux内核源码注解
轻松学习Linux操作系统内核源码的方法 针对好多Linux 爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制:一.核心源程序的文件 ...
- Linux内核源码分析 day01——内存寻址
前言 Linux内核源码分析 Antz系统编写已经开始了内核部分了,在编写时同时也参考学习一点Linux内核知识. 自制Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入 ...
- linux内存源码分析 - SLUB分配器概述
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ SLUB和SLAB的区别 首先为什么要说slub分配器,内核里小内存分配一共有三种,SLAB/SLUB/SLOB ...
- linux中断源码分析 - 中断发生(三)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 回顾 上篇文章linux中断源码分析 - 初始化(二)已经描述了中断描述符表和中断描述符数组的初始化,由于在初始 ...
- atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结 1. 为什么虚拟机语言容易被反编译 1 2. 源码泄露的问题问题 1 3. Excelsior JET 1 4. gcj.的流 ...
- linux 手动源码安装lnmp(亲测)
linux 手动源码安装lnmp笔记(亲测)<pre>先安装这2个yum install gccyum install g++</pre><pre>先在linux ...
- Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这 ...
- Atitit. 查找linux 项目源码位置
Atitit. 查找linux 项目源码位置 1. netstat -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...
随机推荐
- 使用SBT构建Scala项目
既然决定要在Scala上下功夫,那就要下的彻底.我们入乡随俗,学一下SBT.sbt使用ivy作为库管理工具.ivy默认把library repository建在user home下面. 安装SBT 在 ...
- IE8下网页中的视频会遮挡住顶层DIV的解决办法
在IE8浏览器下,发现网页中的视频会遮挡住本来固定在最顶层的DIV.即便使用z-index也无法解决.但是其他浏览器是正常的. 解决的办法很简单,就是在调用flash视频播放器的时候,加上一个参数“o ...
- JS 自定义回调函数callback
1 应用场景:js的异步加载,在get,post,ajax异步加载的时候,可能对应的请求没有完成,这时需要使用请求回来的数据作为参数调用其他函数,这时就需要使用回调函数. 2 回调函数作用:等待函数调 ...
- [C# 基础知识系列]专题四:事件揭秘
转自http://www.cnblogs.com/zhili/archive/2012/10/27/Event.html 引言: 前面几个专题对委托进行了详细的介绍的,然后我们在编写代码过程中经常会听 ...
- python基础知识五
数据结构基本上就是---它们可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python中有三种内建的数据结构---列表.元祖和字典. 我们将会学习如何使用它们,以及它们如何使编程变得 ...
- sql - union all
我的 表1中有字段([c],[num]), 记录诸如: [c] [num] 0 188 1 167 2 373 3 378 4 377 表二也有同样的字段,记录有的id不同, 请问 ...
- WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件
一.安装vmware没有问题,网络设置以NAT方式(VMnet8是vmware专属的虚拟网卡).安装完毕后设置虚拟机的 VirtualNetworkEditor(可以再开始->所有程序VMwar ...
- mac下使用自带的apache与php
启动apache 运行命令 sudo apachectl -k start 启动apache 如果报 AH00526: Syntax error on line 20 of /private/etc ...
- SQL分页小Demo
SELECT @TotalCount=count(1) FROM TableA A WITH(NOLOCK) INNER JOIN TableB B WITH(NOLOCK) ON A.Id=B.Id ...
- 【JQuery学习历程】1.初识JQuery
1.JQuery简介: JQuery是用js写的JavaScript库,是为了简化js对HTML元素的操作.实现动画效果并方便为网站提供ajax交互: 2.ready()方法: ready()方法和j ...