最近在看网段计算机信息扫描的编程,
方法是仿照nbtstat,向对方的137端口发数据包,包的内容如下   
  BYTE   b[50]={0x0,0x00,0x0,0x10,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,   
                            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,0x0,0x0,0x21,0x0,0x1};   
对方会向你返回一个数据包,   
其中有对方的工作组,主机名,用户名,MAC地址。
我想问下,
b[50]是如何构造的,有什么含义?
返回的数据包的格式是什么?

解决方案 »

  1.   

    应用程序中的一个socket文件描述符对应一个socket pair,也就是源地址:源端口号和目的地址:目的端口号,也对应一个TCP连接。内容有源端口号和目的端口号,通讯的双方由IP地址和端口号标识。32位序号、32位确认序号、窗口大小稍后详细解释。4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头最长可以是4x15=60字节,如果没有选项字段,TCP协议头最短20字节。等等.
    下图是一次TCP通讯的时序图。
    另外,如果是IP数据报的话:
    IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于IPv4,4位版本字段是4。4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节,也就是不带任何选项的IP首部,4位能表示的最大值是15,也就是说首部长度最大是60字节。8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),还有4个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。总长度是整个数据报(包括IP首部和IP层payload)的字节数。每传一个IP数据报,16位的标识加1,可用于分片和重新组装数据报。3位标志和13位片偏移用于分片。TTL(Time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP还是IGMP。然后是校验和,只校验IP首部,数据的校验由更高层协议负责。IPv4的IP地址长度为32位。选项字段的解释从略。这个东西解释起来很费劲啊,你上面所有的疑问可以从<TCP/IP协议 原理与实现>这本书上得到满意解释.关于你的内容还可以看这里,有你关于nbtstat与socket相关编程:
    http://learn.akae.cn/media/ch37s02.html
      

  2.   

    参考NetBIOS协议相关文档定义的包格式