IP、ICMP、UDP、TCP 校验和算法

以前看计算机网络相关的书,每次看到IP或者UDP报头校验和时,都一瞥而过,以为相当简单,不就是16bit数据的相加吗。最近在研究《TCP/IP详解 卷1:协议》这本书,看到校验和是16bit字的二进制反码和(晕,以前都没注意原来是反码和,看来以前看书不仔细啊!罪过,罪过~~),觉得很奇怪,为什么会用反码和,而不是直接求和呢?(因为我认为TCP/IP协议里面的算法和思想一般都是非常经典的,人家这么做一定有原因的)下面就来探索一下这个校验和算法具体怎么实现的。 首先,IP、ICMP、UDP和TCP报文头部都有校验和字段...
2014-02-08 23:02 | 阅读 5017 次 | 评论 0 条

select模型服务器端和客户端代码

使用VC6.0编译。为了测试方便,服务器端只接收一次数据,当客户端关闭后,服务器端也随之关闭。 服务器端代码: #include "../common/InitSock.h" #include <stdio.h> CInitSock theSock; //加载套接字库 int main() { USHORT nPort = 4567; //此服务器监听的端口号 //创建监听套接字 SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); so...
2014-02-06 22:11 | 阅读 3680 次 | 评论 0 条

用C++实现网络编程---抓取网络数据包的实现方法(转)

做过网管或协议分析的人一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包。抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议、IP、UDP、TCP、甚至各种应用层协议),敏感数据的捕捉等。下面我们就来看看在windows下如何实现数据包的捕获。 下面先对网络嗅探器的原理做简单介绍。 嗅探器设计原理 嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与...
2014-02-01 22:24 | 阅读 5398 次 | 评论 0 条

获取MAC地址

Windows平台下用C++代码取得机器的MAC地址并不是一件简单直接的事情。到目前为止,作者尚未发现有任何一个通用的100%的适用于所有Windows平台的方法可以稳定的取得MAC地址。而有些应用(比如MMORPG)则需要稳定的得到机器的MAC地址,解决方案往往是通过多种方法依次使用来提高成功率。 以下方法只会返回多网卡的第一个MAC地址。 网上有很多文章和源码来解决该问题,大多不全或有问题。本篇所有方法均经过整理调试,可直接使用。 作者也不喜欢满篇帖代码,本篇贴代码是方便直接使用,请读者谅解。 ...
2014-01-30 18:41 | 阅读 12674 次 | 评论 0 条

struct hostent结构体

这个数据结构是这样的:    struct hostent {    char *h_name;    char **h_aliases;    int h_addrtype;    int h_length;    char **h_addr_list;    };    #define h_addr h_addr_list[0] 这里是这个数据结构的详细资料: struct hostent:   h_name – 地址的正式名称。   h_aliases – 空字节-地址的预备名称的指针。   h_addrtype –地...
2014-01-30 14:37 | 阅读 1521 次 | 评论 0 条