RodYang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

08 2013 档案

摘要:#include "stdafx.h"#include #include #pragma comment(lib,"ws2_32.lib")short myntohs(short s){ BYTE high=(BYTE)s>>8; BYTE lower=(BYTE)s; s=(lower<<8)+high; return s;}short myntohs1(short s){ __asm { movzx eax,word ptr [ebp+8] mov ch,al shr ax,8 o... 阅读全文
posted @ 2013-08-22 14:17 RodYang 阅读(279) 评论(0) 推荐(0)

摘要:在看C/C++的书或者试题时,有时会见到利用word或dword定义的变量,第一次看到的时候并不知其是什么,更不用说word或dword占几个字节了。幸好在VC安装文件夹下有相关的定义。如C:\Program Files\Microsoft Visual Studio\VC98\Include查看头文件WINDEF.H的定义:typedef unsigned longDWORD;typedef intBOOL;typedef unsigned charBYTE;typedef unsigned shortWORD;typedef floatFLOAT;typedef FLOAT*PFLOAT; 阅读全文
posted @ 2013-08-21 15:08 RodYang 阅读(1802) 评论(0) 推荐(0)

摘要:下面这些TCP/IP数据包是我在进行Socket及Wipcap网络编程过程中曾经用到过的数据包结构体, 这些东西平时看起来不起眼,真正用到的时候就会觉得非常有用......以太帧头格式结构体,共14个字节: typedef struct ether_header { unsigned char ether_dhost[6];//目的MAC地址 unsigned char ether_shost[6];//源MAC地址 unsigned short ether_type;//协议类型 }ETHHEADER,*PETHHEADER;IPv4报头格式结构体,共20个字节:typede... 阅读全文
posted @ 2013-08-21 09:23 RodYang 阅读(1687) 评论(0) 推荐(0)

摘要:解析IPV4报文和IPV6报文的checksum的算法:校验和(checksum)算法,简单的说就是16位累加的反码运算:计算函数如下:我们在计算时是主机字节序,计算的结果封装成IP包时是网络字节序,注意这两者之间的区别,我们在从IP包里读取要转化为主机字节序,往IP包里存入时要转化为网络字节序在存入。UINT32 Checksum(UINT32 cksum, VOID *pBuffer, UINT32 size){INT8 num = 0;UINT8 *p = (UINT8 *)pBuffer;if ((NULL == pBuffer) || (0 == size)){return cksu 阅读全文
posted @ 2013-08-21 08:50 RodYang 阅读(4000) 评论(0) 推荐(1)

摘要:我就不管是按“位”(bit)取反相加,还是 按“1的补码”相加了,总之就是把需要进行校验的“字串”加(+)起来,把这相加的 结果取反当做“校验和” (Checksum), 比如,相加的结果是0101,那么“校验和”就是1010,验证的时候呢,就是0101+1010 = 1111,取反后, 就是0——如果验证得“零”(0),就是正确的!先将checksum字段置零,然后按16位分组,计算2进制反码和,最后再求和的反码!为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份I 阅读全文
posted @ 2013-08-17 23:55 RodYang 阅读(12405) 评论(0) 推荐(0)

该文被密码保护。
posted @ 2013-08-15 21:52 RodYang 阅读(0) 评论(0) 推荐(0)

摘要:在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存。两种最容易的技术是:l应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存。(应用程序分配共享内存)l由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序。(驱动程序分配共享内存)使用IOCTL共享Buffer:使用一个IOCT描述的Buffer,在驱动和用户程序间共享内存是内存共享最简单的实现形式。毕竟,IOCTL也是驱动支持其他I/O请求最经典的方法。应用程序调用Win32函数DeviceIoControl(),要被共享的Buffer的基地址和长度 阅读全文
posted @ 2013-08-15 20:11 RodYang 阅读(2035) 评论(0) 推荐(0)

摘要:做ndishook的时候,自定义了一个数据包,包结构应该没有问题,填充NDIS_PACKET结构是这样的,先初始化:NdisAllocatePacketPool(&nStatus,&m_hMyPacketPool,0xFFF,0x10);NdisAllocateBufferPool(&nStatus,&m_hMyBufferPool,0x10);NdisAllocateMemoryWithTag(&m_pBuffer,MAX_PACKET_SIZE,'NAMW');NdisAllocateBuffer(&nStatus,& 阅读全文
posted @ 2013-08-14 16:51 RodYang 阅读(2050) 评论(0) 推荐(0)

该文被密码保护。
posted @ 2013-08-13 21:49 RodYang 阅读(4) 评论(0) 推荐(0)

摘要:// // NDIS_PACKET结构的定义 // typedef struct _NDIS_PACKET { NDIS_PACKET_PRIVATE Private; //这个其实是一个链表结构,Private.Head指向第一个链表,Private.Tail指向最后一个 //以下有关于这个结构的解释 union { struct // For Connection-less miniports { UCHAR MiniportReserved[2*sizeof(PVOID)]; UCHAR WrapperReserved[2*sizeof(PVOID)]; ... 阅读全文
posted @ 2013-08-13 18:01 RodYang 阅读(745) 评论(0) 推荐(0)

摘要:Author :JeffreyMy Blog:http://blog.csdn.net/gueter/引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POS 阅读全文
posted @ 2013-08-06 14:43 RodYang 阅读(314) 评论(0) 推荐(0)

摘要:学习NDIS一段时间了,不过还是毫无头绪,理论都能明白,可是不知道怎么下手去做,网上没有没有太详细的教程。我是比较笨,而且比较懒的。:) 所以准备暂缓NDIS网络和驱动方面的学习,等今后遇见师父了再请教之,好运~ NDIS中的网络数据都是原始的,即没有经过主机协议栈处理的网络数据,如果学习网络协议的话,我觉得研究原始数据包还是挺合适的。 Socket通信中,主机A与主机B之间通信,Socket接收到的内容都是通信的内容,没有附带主机A或主机B的信息,这点可以回想最开始学习Socket编程的时候,主机A发送“Hello,mydearfriend.”,那么主机B收到的确实是“Hello,m... 阅读全文
posted @ 2013-08-05 13:01 RodYang 阅读(1489) 评论(0) 推荐(0)

摘要:1、算法思路: IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,算法如下: 在发送数据时,为了计算IP数据包的校验和。应该按如下步骤: (1)把IP数据包的校验和字段置为0; (2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和; (3)把得到的结果存入校验和字段中。 在接收数据时,计算数据包的校验和相对简单,按如下步骤: (1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段; (2)检查计算出的校验和的结果是否等于零(反码应为16个0); (3)如果等于零,说明被整除,校验是和正确。否则,校验和就是错误的,协议... 阅读全文
posted @ 2013-08-02 07:12 RodYang 阅读(2745) 评论(0) 推荐(0)