文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发数据结构原始套接字透析之Raw Socket基础
精品推荐
特别推荐
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·数据库设计范式深入浅出
·理解软件保护技术之序列号方式
·大型网站必鉴:分销渠道的结构
·你的代码真的很健壮吗
·利用HOOK拦截封包原理
·四种网络游戏外挂的设计方法
·程序语言效率比较
·五子棋算法
·正则表达式从入门到精通
·SQL Server不能启动的常见故障
·Windows应用程序设计的基本术语
·软件本地化与汉化
·Windows中断编程
·windows nt 4.0中文版的开机过程
热点TOP10
·兵之利器 软件开发辅助工具纵览
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·DCOM揭秘之六
·VS2008 第一次安装心得及使用
·游戏外挂设计技术探讨
·饺子馆的物流故事之二——供应链视角下的缺货及品类管理
·《数据结构》试题下载2004
·代码静态分析工具PC-LINT安装配置
·使用BHO定制你的IE浏览器
·原始套接字透析之Raw Socket基础
·基于CS模式的Winsock网络通讯程序
·程序语言效率比较
·《Windows程序设计》读书笔记之六
·四种网络游戏外挂的设计方法
·用CVSNT与WINCVS实现CVS的架设
·利用HOOK拦截封包原理
·简单对象访问协议(SOAP)初级指南
·带你全面了解数据库应用系统的开发步骤
·UML业务建模实例分析

原始套接字透析之Raw Socket基础

日期:2007年7月27日 作者: 查看:[大字体 中字体 小字体]


在进入Raw Socket多种强大的应用之前,我们先讲解怎样建立一个Raw Socket及怎样用建立的Raw Socket发送和接收IP包。

  建立Raw Socket

  在Windows平台上,为了使用Raw Socket,需先初始化WINSOCK:

// 启动 Winsock
WSAData wsaData;
if (WSAStartup(MAKEWORD(2, 1), &wsaData) != 0)
{
 cerr << "Failed to find Winsock 2.1 or better." << endl;
 return 1;
}
  MAKEWORD(2, 1)组成一个版本字段,2.1版,同样的,MAKEWORD(2, 2)意味着2.2版。MAKEWORD本身定义为:

inline word MakeWord(const byte wHigh, const byte wLow)
{
 return ((word)wHigh) << 8 wLow;
}
  因此MAKEWORD(2, 1)实际等同于0x0201。同样地,0x0101可等同于MAKEWORD(1, 1)。

  与WSAStartup()的函数为WSACleanup(),在所有的socket都使用完后调用,如:

void sock_cleanup()
{
 #ifdef WIN32
  sockcount--;
  if (sockcount == 0)
   WSACleanup();
 #endif
}
  接下来,定义一个Socket句柄:

SOCKET sd; // RAW Socket句柄
  创建Socket并将句柄赋值给定义的sd,可以使用WSASocket()函数来完成,其原型为:

SOCKET WSASocket(int af, int type, int protocol, LPWSAPROTOCOL_INFO
lpProtocolInfo, GROUP g, DWORD dwFlags);
  其中的参数定义为:

  af:地址家族,一般为AF_INET,指代IPv4(The Internet Protocol version 4)地址家族。

  type:套接字类型,如果创建原始套接字,应该使用SOCK_RAW;

  Protocol:协议类型,如IPPROTO_TCP、IPPROTO_UDP等;

  lpProtocolInfo :WSAPROTOCOL_INFO结构体指针;

  dwFlags:套接字属性标志。

  例如,下面的代码定义ICMP协议类型的原始套接字:

sd = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, 0, 0, 0);
  创建Socket也可以使用socket()函数:

SOCKET WSAAPI socket( int af, int type, int protocol);
  参数的定义与WSASocket()函数相同。

  为了使用socket()函数创建的Socket,还需要将这个Socket与sockaddr绑定:

SOCKADDR_IN addr_in;

addr_in.sin_family = AF_INET;
addr_in.sin_port = INADDR_ANY;
addr_in.sin_addr.S_un.S_addr = GetLocalIP();

nRetCode = bind(sd, (struct sockaddr*) &addr_in, sizeof(addr_in));
if (SOCKET_ERROR == nRetCode)
{
 printf("BIND Error!%d\n", WSAGetLastError());
}
  其中使用的struct sockaddr_in(即SOCKADDR_IN)为:

struct sockaddr_in
{
 unsigned short sin_family;
 unsigned short int sin_port;
 struct in_addr sin_addr;
 unsigned char sin_zero[8];
}
  而bind()函数第二个参数的struct sockaddr类型定义为:

struct sockaddr
{
 unisgned short as_family;
 char sa_data[14];
};
  实际上,bind()函数采用struct sockaddr是为了考虑兼容性,最终struct sockaddr和struct sockaddr_in的内存占用是等同的。struct sockaddr_in中的struct in_addr成员占用4个字节,为32位的IP地址,定义为:

typedef struct in_addr
{
 union
 {
  struct
  {
   u_char s_b1, s_b2, s_b3, s_b4;
  } S_un_b;
  struct
  {
   u_short s_w1, s_w2;

[1] [2] [3] [4] 下一页 




上一篇:黑客之旅――原始套接字透析之前言

下一篇:原始套接字透析之ICMP拒绝服务攻击

原始套接字透析之Raw Socket基础 相关文章:
·破解基础知识汇编
·socket编程原理
·基础知识 初级黑客安全技术命令详解
·网络组建大全(包括企业网、校园网、网吧和基础知识)
·Windows黑客编程基础
·用Photoshop画漫画教程之基础入门
·C#基础概念二十五问
·Flash AS基础精典教程
·网络游戏封包基础
·CAD三维基础实例教程
原始套接字透析之Raw Socket基础 相关软件:
·SQL Server 2000 基础系列课程视频
·计算机基础知识教程
·鸟哥的linux私房菜:基础学习篇
·会计学基础
·计算机应用基础(视频)教程(6-10)
·Flash MX基础教程 v2.0.0
·计算机基础知识
·东南大学SQL数据库基础视频教学全42讲 CSF 详见查看
·windows 95基础入门
·全国导游基础知识汇总

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn