没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1、原始套接字透析之前言......................................................................................................................2
2、TCP/UDP 完整数据包校验和通用计算...........................................................................................8
3、使用原始套接字发送自定义 IP 包..................................................................................................13
4、VISUAL C++自定义发 IP 包例子...................................................................................................21
5、WIN2000 中用户自定义 IP 头的实现及 OICQSEND 完整实例源程序......................................25
6、一个 SYN 扫描程序源代码..............................................................................................................32
7、穿透防火墙的数据传输源码............................................................................................................41
1、原始套接字透析之前言
大多数程序员所接触到的套接字(Socket)为两类:
(1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的
TCP 服务应用;
(2)数据报式套接字(SOCK_DGRAM):一种无连接的 Socket,对应于无连接的
UDP 服务应用。
从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了
TCP/IP 应用的全部,因为基于 TCP/IP 的应用,从协议栈的层次上讲,在传输层的确只可
能建立于 TCP 或 UDP 协议之上(图 1),而 SOCK_STREAM、 SOCK_DGRAM 又分别
对应于 TCP 和 UDP,所以几乎所有的应用都可以用这两类套接字实现。
图 1 TCP/IP 协议栈
但是,当我们面对如下问题时,SOCK_STREAM、SOCK_DGRAM 将显得这样无助:
(1) 怎样发送一个自定义的 IP 包?
(2) 怎样发送一个 ICMP 协议包?
(3) 怎样使本机进入杂糅模式,从而能够进行网络 sniffer?
(4) 怎样分析所有经过网络的包,而不管这样包是否是发给自己的?
(5) 怎样伪装本地的 IP 地址?
这使得我们必须面对另外一个深刻的主题――原始套接字( Raw Socket)。 Raw
Socket 广泛应用于高级网络编程,也是一种广泛的黑客手段。著名的网络 sniffer、拒绝服
务攻击(DOS)、 IP 欺骗等都可以以 Raw Socket 实现。
Raw Socket 与标准套接字(SOCK_STREAM、SOCK_DGRAM)的区别在于前者直接
置" 根" 于操作系统网络核心(Network Core ),而 SOCK_STREAM、SOCK_DGRAM
则"悬浮"于 TCP 和 UDP 协议的外围,如图 2 所示:
图 2 Raw Socket 与标准 Socket
当我们使用 Raw Socket 的时候,可以完全自定义 IP 包,一切形式的包都可以"制造"出
来。因此,本文事先必须对 TCP/IP 所涉及 IP 包结构进行必要的交待。
目前,IPv4 的报头结构为:
版本号
(4)
包头长(4) 服务类型(8) 数据包长度(16)
标识(16) 偏移量(16)
生存时间(8) 传输协议(8) 校验和(16)
源地址(32)
目的地址(32)
选项(8)
.........
填充
对其进行数据结构封装:
typedef struct _iphdr //定义 IP 报头
{
unsigned char h_lenver; //4 位首部长度+4 位 IP 版本号
unsigned char tos; //8 位服务类型 TOS
unsigned short total_len; //16 位总长度(字节)
unsigned short ident; //16 位标识
unsigned short frag_and_flags; //3 位标志位
unsigned char ttl; //8 位生存时间 TTL
unsigned char proto; //8 位协议 (TCP, UDP 或其他)
unsigned short checksum; //16 位 IP 首部校验和
unsigned int sourceIP; //32 位源 IP 地址
unsigned int destIP; //32 位目的 IP 地址
} IP_HEADER;
或者将上述定义中的第一字节按位拆分:
typedef struct _iphdr //定义 IP 报头
{
unsigned char h_len : 4; //4 位首部长度
unsigned char ver : 4; //4 位 IP 版本号
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char proto;
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
} IP_HEADER;
更加严格地讲,上述定义中 h_len、ver 字段的内存存放顺序还与具体 CPU 的 Endian 有
关,因此,更加严格的 IP_HEADER 可定义为:
typedef struct _iphdr //定义 IP 报头
{
#if defined(__LITTLE_ENDIAN_BITFIELD)
unsigned char h_len : 4; //4 位首部长度
unsigned char ver : 4; //4 位 IP 版本号
#elif defined (__BIG_ENDIAN_BITFIELD)
unsigned char ver : 4; //4 位 IP 版本号
unsigned char h_len : 4; //4 位首部长度
#endif
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char proto;
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
} IP_HEADER;
TCP 报头结构为:
源端口(16) 目的端口(16)
序列号(32)
确认号(32)
TCP 偏移量
(4)
保留(6) 标志(6) 窗口(16)
校验和(16) 紧急(16)
选项(0 或 32)
数据(可变)
对应数据结构:
typedef struct psd_hdr //定义 TCP 伪报头
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP 长度
}PSD_HEADER;
typedef struct _tcphdr //定义 TCP 报头
{
unsigned short th_sport; //16 位源端口
unsigned short th_dport; //16 位目的端口
unsigned int th_seq; //32 位序列号
unsigned int th_ack; //32 位确认号
unsigned char th_lenres; //4 位首部长度/4 位保留字
unsigned char th_flag; //6 位标志位
unsigned short th_win; //16 位窗口大小
unsigned short th_sum; //16 位校验和
unsigned short th_urp; //16 位紧急数据偏移量
} TCP_HEADER;
同样地,TCP 头的定义也可以将位域拆分:
typedef struct _tcphdr
{
unsigned short th_sport;
unsigned short th_dport;
unsigned int th_seq;
剩余50页未读,继续阅读
资源评论
- jnpher2012-06-20资料不详,比如多线程套接字异步消息等都没有!
majintao0229
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功