码迷,mamicode.com
首页 > 其他好文 > 详细

抓包分析提取五元组

时间:2015-05-07 21:57:13      阅读:2677      评论:0      收藏:0      [点我收藏+]

标签:

参考:http://ctf.idf.cn/index.php?g=&m=article&a=index&id=10 写的很赞的一些列入门文章

网络中每个通信实体的 socket 是用一个三元组标识的。三元组往往称为半相关

三元组指的是:协议族(地址族),网络地址、和传输层端口 (Ipv4 )。
通信双方的一个连接是用网络五元组来标识的,它是由双方相同协议族的两个本地三元组合成的。五元组往往称为全相关。
网络五元组指的是:协议族(地址族)、本地网络地址、本地端口、远程网络地址和远程端口。 
套接口分为若干类型,常用的是 SOCK_STREAM 和 SOCK_DGRAM 。
 SOCK_STREAM 是面向连接的套接字,使用的协议是 TCP ,通信的双方通过三次握手建立起虚拟的连接线路,通信的过程是可靠的。
而 SOCK_DGRAM 是面向非连接的套接字,使用的协议是 UDP ,通信双方以数据包的方式进行通信,通信的可靠性就不能得到保证。本项目要求采用 SOCK_STREAM 类型。

五元组格式(协议,本地 IP ,本地端口,远方 IP ,远方端口)的建立过程

服务器一般都有两个功能:监听 和 处理

在监听的时候,协议 / 本地 IP/ 本地端口(监听端口)都是确定的,当收到客户端的报文时,远方 IP 就是报文的源 IP 地址,远方端口就是报文的源端口,这样一来五元组就确定了。

然后服务器进入处理阶段,需要开启一个新的线程与客户端交互,当然就需要确定一个新的五元组,这时候协议 / 本地 IP/ 远方 IP/ 远方端口都来自监听阶段确定的五元组,而本地端口会在 1024 以上随机选取 (不再使用监听端口,以便监听其他客户端的请求)。

客户端的话正好相反,在发送请求时采用随机的本地端口 ,而接受响应时采用服务器的源端口作为远方端口。

 1.  创建套接字
int socket(int family, int type, int protocol);
Socket 函数用于建立三元组中的协议族部分 。
2. 绑定套接字
int bind(int sockfd, cost struct sockaddr * saddr,  socklen_t addrlen);
bind 函数用于建立三元组中的本地 IP 地址和本地端口号部分。
3. 监听
int listen( int sockfd, int backlog ) ;
4. 接受连接
int accept( int sockfd, struct sockaddr * client_addr, socklen_t *addrlen);
5. 连接服务器
int connect(int sockfd, const struct sockaddr *serv_addr,  socklen_t addrlen);
connect 完成后通信双方两个三元组组成的五元组就建立起来了。
技术分享
PCAP文件格式分析

pcap文件格式是常用的数据报文存储格式,主流抓包软件,如wireshark、tcpdump等都支持这种格式。

其具体格式为:

    pcap文件头 + { 数据报文信息 + 数据报文 }+..
二、文件头结构体:24字节
sturct pcap_file_header
{
DWORD              magic; //标识位,目前为“D4 C3 B2 A1”
      WORD                 version_major;//主版本号
      WORD                 version_minor;//副版本号
DWORD              thiszone;//时区
DWORD              sigfigs;//精确时间戳
DWORD              snaplen;//数据包最大长度
DWORD              linktype;//链路层类型,1代表以太网
}
三、数据包头结构体:16字节
struct pcap_pkthdr
{
struct timeval         ts; //时间戳
      DWORD              caplen;//数据包长度
      DWORD              len;//数据包实际长度
}
 
struct timeval
{
DWORD       GMTtime;//秒计时
DWORD       microTime;//毫秒计时
}
数据报文,即网络中传输的数据包,其具体格式依赖于具体的网络协议,比如一个数据报文链路层采用以太网协议,网络层采用IP协议,传输层采用TCP协议,那么其内容就需要一层一层向上解析。可以自己对比协议规范去进行pcap文件的解析。

抓包分析提取五元组

标签:

原文地址:http://www.cnblogs.com/paranoidboy/p/4486034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!