用netfilter_queue 在用户态修改网络数据包的例子程序

用netfilter_queue 在用户态修改网络数据包的例子程序
用netfilter_queue 在用户态修改网络数据包的例子程序

用netfilter_queue 在用户态修改网络数据包的例子程序

libnetfilter_queue缺乏文档,看着libnetfilter_queue自带的例子弄的。现在写不出有头有尾的文章了,就贴贴代码(还没注释),提几个我记得的几个注意点就不写了,见谅。

程序功能,将输出端目的地为220.181.37.55 的包,都改为目的地为64.233.189.104,输入段反之,达到DNAT的一小半功能,完整的NAT 要做状态记录的。

注意点:

1 - 2.6.23 的内核有BUG,nfq_unbind_pf 返回值不正确,见:https://www.360docs.net/doc/ca11320161.html,/https://www.360docs.net/doc/ca11320161.html,filter.general/33573

2 - TCP 要做正确的checksum重新计算,否则包发不出去。UDP也是,不过这段程序里没写,如果你有兴趣就练练手吧。

3 - iptables 的QUEUE target 内核模块不返回XT_CONTINUE/IPT_CONTINUE 的——NF_QUEUE 是一个netfilter的机制,不是x_tables的——所以如果要在QUEUE之后继续遍历iptables 的规则就需要点小技巧,技巧在下面的loader.sh程序里展示了:通过在mangle表里的mark 来判断是第一次进入QUEUE还是第二次。而且规则是放在最前的,保证不影响后面的mark和用户态的traffict control程序。

就这些了,不写了,贴代码。

Makefile :

nf_queue_test : nf_queue_test.c

gcc $(CFLAGS) -lnetfilter_queue $< -o $@clean :

rm -f nf_queue_test

nf_queue_test.c :

#include#include#include#include#include#include

#include#include#include#include #include#ifdef __LITTLE_ENDIAN #define IPQUAD(addr) /

((unsigned char *)&addr)[0], /

((unsigned char *)&addr)[1], /

((unsigned char *)&addr)[2], /

((unsigned char *)&addr)[3] #else#define IPQUAD(addr) /

((unsigned char *)&addr)[3], /

((unsigned char *)&addr)[2], /

((unsigned char *)&addr)[1], /

((unsigned char*)&addr)[0] #endif static u_int16_t checksum(u_int32_t init, u_int8_t*addr, size_t count){ /* Compute Internet Checksum for "count" bytes

* beginning at location "addr". */u_int32_t sum= init; while( count > 1 ) { /* This is the inner loop */sum += ntohs(* (u_int16_t*) addr);

addr += 2;

count -= 2;

} /* Add left-over byte, if any */if( count > 0 )

sum += * (u_int8_t *) addr; /* Fold 32-bit sum to 16 bits */while (sum>>16)

sum = (sum & 0xffff) + (sum >> 16); return (u_int16_t)~sum;

} static u_int16_t ip_checksum(struct iphdr* iphdrp){ return checksum(0, (u_int8_t*)iphdrp, iphdrp->ihl<<2);

} static void set_ip_checksum(struct iphdr* iphdrp){

iphdrp->check = 0;

iphdrp->check = htons(checksum(0, (u_int8_t*)iphdrp, iphdrp->ihl<<2));

} static u_int16_t tcp_checksum2(struct iphdr* iphdrp, struct tcphdr* tcphdrp){ size_t tcplen = ntohs(iphdrp->tot_len) - (iphdrp->ihl<<2); u_int32_t cksum = 0;

cksum += ntohs((iphdrp->saddr >> 16) & 0x0000ffff);

cksum += ntohs(iphdrp->saddr & 0x0000ffff);

cksum += ntohs((iphdrp->daddr >> 16) & 0x0000ffff);

cksum += ntohs(iphdrp->daddr & 0x0000ffff);

cksum += iphdrp->protocol & 0x00ff;

cksum += tcplen; return checksum(cksum, (u_int8_t*)tcphdrp, tcplen);

} static u_int16_t tcp_checksum1(struct iphdr* iphdrp){ struct tcphdr *tcphdrp =

(struct tcphdr*)((u_int8_t*)iphdrp + (iphdrp->ihl<<2)); return tcp_checksum2(iphdrp, tcphdrp);

} static void set_tcp_checksum2(struct iphdr* iphdrp, struct tcphdr* tcphdrp){

tcphdrp->check = 0;

tcphdrp->check = htons(tcp_checksum2(iphdrp, tcphdrp));

} static void set_tcp_checksum1(struct iphdr* iphdrp){ struct tcphdr *tcphdrp =

(struct tcphdr*)((u_int8_t*)iphdrp + (iphdrp->ihl<<2));

set_tcp_checksum2(iphdrp, tcphdrp);

} static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg, struct nfq_data *nfa, void *data){

(void)nfmsg;

(void)data; u_int32_t id = 0; struct nfqnl_msg_packet_hdr *ph; unsigned char *pdata = NULL; int pdata_len;

ph = nfq_get_msg_packet_hdr(nfa); if (ph){

id = ntohl(ph->packet_id);

}

pdata_len = nfq_get_payload(nfa, (char**)&pdata); if(pdata_len == -1){

pdata_len = 0;

} struct iphdr *iphdrp = (struct iphdr *)pdata;

printf("len %d iphdr %d %u.%u.%u.%u ->",

pdata_len,

iphdrp->ihl<<2,

IPQUAD(iphdrp->saddr));

printf(" %u.%u.%u.%u %s",

IPQUAD(iphdrp->daddr),

getprotobynumber(iphdrp->protocol)->p_name);

printf(" ipsum %hu", ip_checksum(iphdrp)); if(iphdrp->protocol == IPPROTO_TCP){

printf(" tcpsum %hu", tcp_checksum1(iphdrp));

} #define TO"220.181.37.55"#define DNAT_TO"64.233.189.104"if(iphdrp->daddr == inet_addr(TO)){

printf(" !hacked!");

iphdrp->daddr = inet_addr(DNAT_TO);

set_ip_checksum(iphdrp); if(iphdrp->protocol == IPPROTO_TCP){

set_tcp_checksum1(iphdrp);

printf(" ipsum+ %hu tcpsum+ %hu",

ip_checksum(iphdrp), tcp_checksum1(iphdrp));

}

} if(iphdrp->saddr == inet_addr(DNAT_TO)){

iphdrp->saddr = inet_addr(TO);

printf(" !hacked!");

set_ip_checksum(iphdrp); if(iphdrp->protocol == IPPROTO_TCP){

set_tcp_checksum1(iphdrp);

printf(" ipsum+ %hu tcpsum+ %hu",

ip_checksum(iphdrp), tcp_checksum1(iphdrp));

}

}

printf("/n"); return nfq_set_verdict_mark(qh, id, NF_REPEAT, 1,

(u_int32_t)pdata_len, pdata);

} int main(int argc, char **argv){ struct nfq_handle *h; struct nfq_q_handle *qh; struct nfnl_handle *nh; int fd; int rv; char buf[4096];

h = nfq_open(); if (!h) {

exit(1);

} if (nfq_unbind_pf(h, AF_INET) < 0){

exit(1);

} if (nfq_bind_pf(h, AF_INET) < 0) {

exit(1);

} int qid = 0; if(argc == 2){

qid = atoi(argv[1]);

}

printf("binding this socket to queue %d/n", qid);

qh = nfq_create_queue(h, qid, &cb, NULL); if (!qh) {

exit(1);

} if (nfq_set_mode(qh, NFQNL_COPY_PACKET, 0xffff) < 0) {

exit(1);

}

nh = nfq_nfnlh(h);

fd = nfnl_fd(nh); while ((rv = recv(fd, buf, sizeof(buf), 0)) && rv >= 0) {

nfq_handle_packet(h, buf, rv);

} /* never reached */ nfq_destroy_queue(qh);

nfq_close(h);

exit(0);

}

load.sh :

#!/bin/sh TABLE=mangle function remove_chain(){ echo -n removing chain...

{

sudo /sbin/iptables -t ${TABLE} -D PREROUTING -j NF_QUEUE_CHAIN

sudo /sbin/iptables -t ${TABLE} -D OUTPUT -j NF_QUEUE_CHAIN

sudo /sbin/iptables -t ${TABLE} -F NF_QUEUE_CHAIN

sudo /sbin/iptables -t ${TABLE} -X NF_QUEUE_CHAIN

} &>/dev/null echo done

} function create_chain(){ echo -n creating chain...

sudo /sbin/iptables -t ${TABLE} -N NF_QUEUE_CHAIN

sudo /sbin/iptables -t ${TABLE} -A NF_QUEUE_CHAIN -m mark --mark 0 -j NFQUEUE --queue-num 8010

sudo /sbin/iptables -t ${TABLE} -A NF_QUEUE_CHAIN -j MARK --set-mark 0

sudo /sbin/iptables -t ${TABLE} -I OUTPUT -j NF_QUEUE_CHAIN

sudo /sbin/iptables -t ${TABLE} -I PREROUTING -j NF_QUEUE_CHAIN echo done

} function on_iqh(){

remove_chain exit 1

} trap on_iqh INT QUIT HUP

remove_chain

create_chain

sudo ./nf_queue_test 8010

remove_chain

运行loader.sh就好了,如果你没有sudo,那就改改脚本自己用root运行吧

要看效果,就ping 220.181.37.55,然后连220.181.37.55 的80 端口试试,并且注意程序的输出。

PS :220.181.37.55 是baidu 的一个服务器的IP,另外一个IP是google 的。https://www.360docs.net/doc/ca11320161.html,/uid-21768364-id-3618382.html

数据包转发过程

路由器转发数据包过程详解 (2010-05-22 20:59:09) 转载 标签: 分类:学习交流 路由器 数据包转发 it 主机PC1向主机PC2发个数据包,中间经过B路由器,请问源地址和源MAC是怎么变化的? 答:就假设拓扑图是这个样子吧:PC1-----(B1-B2) -------PC2 B1和B2是路由器B上的两个接口, PC1和PC2是PC,由主机PC1向主机PC2发送数据包,那么在主机PC1形成的数据包的目的IP就是PC2的IP,源IP就是主机PC1的IP地址,目标MAC地址就是B1的MAC地址,源MAC地址就是PC1的MAC地址。 转发过程:假如是第一次通信PC1没有PC2的ARP映射表 PC1在本网段广播一个数据帧(目的MAC地址为:FFFF:FFFF:FFFF:FFFF)帧格式为: 段的路由。此时路由器给PC1回复一个应答数据包,告诉PC1自己的MAC地址就是PC1要通信的PC2主机的MAC地址。而此时PC1建立ARP映射表,将该MAC地址(即路由器的B1接口)与PC2的IP地址建立映射关系。实际上是路由器对其进行了“欺骗”。 其应答数据帧格式为: 对于路由器B同样建立了自己的ARP映射表:将PC1的MAC地址与PC1的IP地址映射。

数据包在流出B2接口的时候其数据包的帧格式为: PC2所在的网段各主机将自己的IP地址与数据包中的目的IP地址比对。若符合则将自己的MAC地址替换上广播MAC地址,并回复该数据帧: 的对应关系调出来。将PC1的MAC地址覆盖路由器B2接口的MAC地址。另一方面路由器更新ARP映射表,将PC2的MAC地址与PC2的IP地址映射。 此时流出路由器B1接口的数据包的帧格式为: 地址建立对应关系。 此后每次通信时由于PC1要与PC2通信时。由于PC1已经建立了到PC2IP地址的ARP映射,所以下次要通信时直接从本地ARP调用。 简单说一下,网络设备间(包括设备之间和计算机之间)如果要相互通信的话必需经过以下这几个步骤: (以TCP/IP协议通信为例) 1、发送端的应用程序向外发出一个数据包。 2、系统判断这个数据包的目标地址是否在同一个网段之内。 3、如果判断出这个数据包的目标地址与这台设备是同一个网段的,那么系统就直接把这个数据包封装成帧,这个数据帧里面就包括了这台设备的网卡MAC地址,然后这个帧就直接通过二层设备(也就是大家说的不带路由的交换机/HUB之类的~^-^)发送给本网段内的目标地址。

网络通信协议分析与应用试题集6828(1).

解答: 1. OSI标准中,采用的是三级抽象:体系结构,服务定义,协议说明。 2. TCP/IP协议族中,使用了三个不同层次的地址,主机网络层或网络接口层使用了:物理地址(MAC地址)。 3. TCP/IP协议族中,使用了三个不同层次的地址,传输层使用了:端口地址。 4. TCP/IP协议族中,使用了三个不同层次的地址,网络层使用了:逻辑地址(IP地址)。 5. 根据所提供的服务方式的不同,端口又可分为TCP协议端口和UDP协议端口两种。 6. 从端口的性质来分,通常可以分为以下三类,注册端口(Registered Ports)松散地绑 定于一些服务。 7. 从端口的性质来分,通常可以分为三类,FTP和HTTP服务需要使用:公认端口(Well Kno wn Ports)类型。 8. 从端口的性质来分,通常可以分为三类,动态或私有端口(Dynamic and/or Private Po rts)容易被黑客和木马程序利用。 9. 接口是同一结点内相邻层之间交换信息的连接点。 10. CCITT与ISO的工作领域是不同的:CCITT 主要是考虑通信标准的制定。 11. CCITT与ISO的工作领域是不同的:ISO主要是考虑信息处理与网络体系结构。 12. OSI参考模型和TCP/IP参考模型只是描述了一些概念,用来协调进程间通信标准的制定。 13. 通信服务可以分为两大类:面向连接服务(connect-oriented service)和无连接服 务(connectless service)。 14. 网络数据传输的可靠性一般通过确认和重传机制保证。 15. 通信协议包括:面向连接与确认服务;面向连接与不确认服务;无连接与确认服务;无连接与不确认服务四种类型。 16. IP协议是无连接的、提供“尽力而为”服务的网络层协议。 17. 17. INTERNET使用了不同类型的地址概念,应用层使用了域名(DNS)、电子邮件址、URL等地址。 18. 网络协议是由程序和进程来完成的。 19. B类IP地址中的一个私有网络地址,如果需要50个子网,网络掩码应该为(点十进制表示):255.255.252.0 。

网络层数据包抓包分析

网络层数据包抓包分析 一.实验内容 (1)使用Wireshark软件抓取指定IP包。 (2)对抓取的数据包按协议格式进行各字段含义的分析。 二.实验步骤 (1)打开Wireshark软件,关闭已有的联网程序(防止抓取过多的包),开始抓包; (2)打开浏览器,输入https://www.360docs.net/doc/ca11320161.html,/网页打开后停止抓包。 (3)如果抓到的数据包还是比较多,可以在Wireshark的过滤器(filter)中输入http,按“Apply”进行过滤。过滤的结果就是和刚才打开的网页相关的数据包。 (4)在过滤的结果中选择第一个包括http get请求的帧,该帧用

于向https://www.360docs.net/doc/ca11320161.html,/网站服务器发出http get请求 (5)选中该帧后,点开该帧首部封装明细区中Internet Protocol 前的”+”号,显示该帧所在的IP包的头部信息和数据区: (6)数据区目前以16进制表示,可以在数据区右键菜单中选择“Bits View”以2进制表示:

(注意:数据区蓝色选中的数据是IP包的数据,其余数据是封装该IP包的其他层的数据) 回答以下问题: 1、该IP包的“版本”字段值为_0100_(2进制表示),该值代表该IP包的协议版本为: √IPv4 □IPv6 2、该IP包的“报头长度”字段值为__01000101__(2进制表示),该值代表该IP包的报头长度为__20bytes__字节。 3、该IP包的“总长度”字段值为___00000000 11101110___ (2进制表示),该值代表该IP包的总长度为__238__字节,可以推断出该IP包的数据区长度为__218__字节。 4、该IP包的“生存周期”字段值为__01000000__ (2进制表示),该值代表该IP包最多还可以经过___64__个路由器 5、该IP包的“协议”字段值为__00000110__ (2进制表示) ,该值代表该IP包的上层封装协议为__TCP__。 6、该IP包的“源IP地址”字段值为__11000000 10101000

高速网络环境下数据包捕获技术的分析

龙源期刊网 https://www.360docs.net/doc/ca11320161.html, 高速网络环境下数据包捕获技术的分析 作者:王亚 来源:《数字技术与应用》2011年第12期 摘要:互联网的迅猛发展,网络带宽飞速增长,在高速网络环境下,传统的网络数据包捕获已经成为制约整个系统的性能提升的瓶颈,为了满足高速网络的数据包捕获的需求,对传统的网络数据包捕获存在的问题进行分析,在此基础上提出了改进措施,为后期研究高速网络下高性能的数据包捕获技术奠定基础。 关键词:高速网数据包捕获 Libpcap 中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2011)12-0194-02 The Analysis of Packet Capture Technology in High Speed Network wangya (Fuyang Teachers College of computer and Information engineering Fuyang 236041) Abstract:The rapid development of the Internet and the rapid growth of network bandwidth,in high-speed network environment,the traditional network data packet capture has become the constraints of the system performance bottleneck. In order to satisfy the high speed network packet capture demand,to analysis the existing problems of the traditional network packet capture,and put forward on this foundation improvement measures.,It lays the foundation for later research of high-speed network and high performance packet capture technology. Keywords:high speed network;packet capture;Libpcap 1、引言 目前,对网络信息监控与检测的软件都是基于数据包捕获技术,如:入侵检测程序Snort、嗅探器Tcpdump等。数据包捕获技术是一种对网络上的数据包进行监听并截取的技术,可以将数据包原封不动的拷贝到捕包端的系统中。数据包捕获是入侵检测系统、网络协议

内核协议栈数据包转发完全解析

内核协议栈数据包转发 目录 1 NAPI流程与非NAPI 1.1NAPI驱动流程 1.2非NAPI流程 1.3NAPI和非NAPI的区别 2内核接受数据 2.1数据接收过程 2.2 采取DMA技术实现 3 e100采用NAPI接收数据过程 3.1 e100_open 启动e100网卡 3.2 e100_rx_alloc_list 建立环形缓冲区 3.3 e100_rx_alloc_skb 分配skb缓存 3.4 e100_poll 轮询函数 3.5 e100_rx_clean 数据包的接收和传输 3.6 e100_rx_indicate 4 队列层 4.1、软中断与下半部 4.2、队列层 5采用非NAPI接收数据过程 5.1netif_rx 5.2轮询与中断调用netif_rx_schedule不同点 5.3 netif_rx_schedule 5.4 net_rx_action 5.5 process_backlog 6数据包进入网络层 6.1 netif_receive_skb(): 6.2 ip_rcv(): 6.3 ip_rcv_finish(): 6.4 dst_input(): 6.5本地流程ip_local_deliver: 6.6转发流程ip_forward(): 1 NAPI流程与非NAPI 1.1NAPI驱动流程: 中断发生 -->确定中断原因是数据接收完毕(中断原因也可能是发送完毕,DMA完毕,甚至是中断通道上的其他设备中断) -->通过netif_rx_schedule将驱动自己的napi结构加入softnet_data的poll_list 链表,禁用网卡中断,并发出软中断NET_RX_SOFTIRQ -->中断返回时触发软中断调用相应的函数net_rx_action,从softnet_data的poll_list

网络数据包分析实验

实验一:网络数据包分析实验 班级:班学号:姓名:一、实验目的 通过对实际的网络数据包进行捕捉,分析数据包的结构,加深对网络协议分层概念的理解,并实际的了解数据链路层,网络层,传输层以及应用层的相关协议和服务。 、实验内容 1. IGMP包解析 1.1数据链路层 El代XEL洱丁;亡日:亡5 MB)」osr: IP- 4m 4 t-is :hi-At I _n * tP f Ld L^iJ 1 Sei 00:00:1^^ saur-ctt El1imro_&ai?SiU Type;IP CgMOsw) 源数据: 数据链路层头部:01 00 5e 00 00 16 00 21 97 0a e5 16 08 00 数据链路层尾部:00 00 00 00 00 00 分析如下:

数据头部的前6个字节是接收者的mac地址:01 00 5e 00 00 16 数据头部的中间6个字节是发送者的mac地址:00 21 97 0a e5 16 数据头部的最后2个字节代表网络协议,即:08 00协议类型。 1.2网络层 Header* 1 cngth: 24 byres n axed services "乜Id:0x00 (.DSCP 0X00: D&fau11: 0x003 Tqtil rength:斗D Tdsrrtificar I cn: QklclJ 也^7460) H Flmqs: Q>00 Fra^Tienr offset;:Q Time VQ live; 1 Fr DTCCDl : IGMP go?) ¥ HPAder fhecksijn:CxJ85c [correct] 5DU RUM;172,10.103.?0

路由器的工作原理

路由器的工作原理 路由器的是实现网络互连,在不同网络之间转发数据单元的重要网络设备。路由器主要工作在OSI参考模型的第三层(网络层),路由器的主要任务就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。因此,当路由器接收到来自一个网络接口的数据包时,首先根据其中所含的目的地址查询路由表,决定转发路径(转发接口和下一跳地址),然后从ARP缓存中调出下一跳地址的MAC地址,将路由器自己的MAC 地址作为源MAC,下一跳地址的MAC作为目的MAC,封装成帧头,同时IP数据包头的TTL(Time To Live)也开始减数,最后将数据发送至转发端口,按顺序等待,传送到输出链路上去。在这个过程中,路由器被认为了执行两个最重要的基本功能:路由功能与交换功能。 路由功能 路由功能是指路由器通过运行动态路由协议或其他方法来学习和维护网络拓扑结构,建立,查询和维护路由表。 路由表里则保存着路由器进行路由选择时所需的关键信息,包含了目的地址、目的地址的掩码、下一跳地址、转发端口、路由信息来源、路由优先级、度量值(metric)等。 路由信息可通过多种协议的学习而来,其来源方式可分为直连路由、静态路由、缺省路由和动态路由。一个路由器上可以同时运行多个不同的路由协议,每个路由协议都会根据自己的选路算法计算出到达目的网络的最佳路径,但是由于选路算法不同,不同的路由协议对某一个特定的目的网络可能选择的最佳路径不同。此时路由器根据路由优先级(决定了来自不同路由来源的路由信息的优先权)选择将具有最高路由优先级(数值最小)的路由协议计算出的最佳路径放置在路由表中,作为到达这个目的网络的转发路径。(优先级顺序:直连路由>静态路由>动态路由(OSPF>RIP)) 而对于一个特定的路由协议,可以发现到达目的网络的所有路径,根据选路

网络数据包的捕获与分析毕业设计

网络数据包的捕获与分析 【摘要】网络数据包的捕获对于网络安全有着巨大的作用,为我们更好的分析网络中的数据流提供了帮助。本论文是基于Windows下开发一个网络监听工具,侧重点在于实现网络数据包的捕获,然后分析并显示捕获到的数据包信息这部分功能的实现,如分析:IP首部协议类型、源IP、目的IP和端口号等。采用的是Winpcap(Windows Packet Capture)来实现的抓包功能。通过VC++6.0中MFC编程实现通过一个完整界面来控制调用Winpcap中的函数来实现对网卡信息的捕获和循环捕获数据包,然后通过预先对于IP、TCP、UDP等数据包的定义和TCP/IP等协议来解析其中包含的内容并返回显示捕获到数据包的信息,当然也可以保存捕获到的数据包到指定地点以便进一步分析。 【关键词】Winpcap;数据包;捕获;分析

The Capture and Analysis of Network Data Packets Wang Hang (Grade 11,Class 1, Major Network Engineering, Scho ol of Mathematics and Computer Science Dept, Shaanxi University of Technology, Hanzhong 723003, Shaanxi) Tutor: Jia Wei Abstract: The capture of network data packets plays an important part in network security, which is helpful for our better analysis of network data flow.This paper is about a network monitoring tool based on Windows system, which emphasizes particularly on realizing the capture and analysis of network data packets and then displays them. Take analysis as an example, it will check the type of the IP protocol, the source address of IP, the destination address of IP and the port https://www.360docs.net/doc/ca11320161.html,e the Winpcap(Windows Packet Capture)to capture of data packets. In MFC programming of VC++6.0, the capture of network data packets can be realized via the invoking and control of the functions through a full control panel, and then the analysis of IP ,TCP,UDP and TCP/IP will be done before they are displayed. Certainly the information captured can be saved to the appointed destination in order to go through an advanced analysis. Key words:Winpcap;Data Packets;Capture;Analysis

网络数据包的听与分析

网络数据包的监听与分析 用Ethereal获取到ftp用户名和密码的截图(和本人姓名不同的没有成绩)。【附录】 1.Ethereal使用入门 ethereal 可以用来从网络上抓包,并能对包进行分析。下面介绍windows 下面ethereal 的使用方法 安装(略) 如果只有一个网卡,启动ethereal 以后,选择菜单Capature->Start ,就OK 了。当你不想抓的时候,按一下stop,抓的包就会显示在面板中,并且已经分析好了。 下面是一个截图: 如果有多个网卡,需要先进行设置,启动ethereal 以后,选择菜单Capature->Options,如下图: Interface: 指定在哪个接口(网卡)上抓包。一般情况下都是单网卡,所以使用缺省的就可以了Limit each packet: 限制每个包的大小,缺省情况不限制 Capture packets in promiscuous mode: 是否打开混杂模式。如果打开,抓取所有的数据包。一般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。Filter:过滤器。只抓取满足过滤规则的包(可暂时略过)File:如果需要将抓到的包写到文件中,在这里输入文件名称。use ring buffer:是否使用循环缓冲。缺省情况下不使用,即一直抓包。注意,循环缓冲只有在写文件的时候才有效。如果使用了循环缓冲,还需要设置文件的数目,文件多大时回卷 其他的项选择缺省的就可以了 ethereal的抓包过滤器 抓包过滤器用来抓取感兴趣的包,用在抓包过程中。抓包过滤器使用的是libcap 过滤器语言,在tcpdump 的手册中有详细的解释,基本结构是:[not] primitive [and|or [not] primitive ...] 如果你想抓取某些特定的数据包时,有以下两种方法,你可以任选一种: 1、在抓包的时候,就先定义好抓包过滤器,这样结果就是只抓到你设定好的那些类型的数据包; 2、先把本机收到或者发出的包都抓下来,然后使用下节介绍的显示过滤器,只让Ethereal 显示那些你想要的那些类型的数据包; etheral的显示过滤器(重点内容) 在抓包完成以后,显示过滤器可以用来找到你感兴趣的包,可以根据1)协议2)是否存在某个域3)域值4)域值之间的比较来查找你感兴趣的包。 举个例子,如果你只想查看使用tcp 协议的包,在ethereal 窗口的左下角的Filter 中输入tcp,然后回车,ethereal 就会只显示tcp 协议的包。如下图所示: 值比较表达式可以使用下面的操作符来构造显示过滤器自然语言类 c 表示举例eq == ip.addr== ne != ip.addr!= gt > frame.pkt_len>10 lt < frame.pkt_len<10 ge >= frame.pkt_len>=10 le <= frame.pkt_len<=10 表达式组合可以使用下面的逻辑操作符将表达式组合起来自然语言类 c 表示举例and && 逻辑与,比如ip.addr= or || 逻辑或,比如ip.addr= xor ^^ 异或,如tr.dst[0:3] == xor tr.src[0:3] == not ! 逻辑非,如!llc

sniffer数据包捕获

实训报告 一、sniffer的功能认知; 1. 实时网络流量监控分析 Sniffer Portable LAN能够对局域网网络流量进行实时监控和统计分析,对每个链路上的网络流量根据用户习惯,可以提供以表格或图形(条形图、饼状图和矩阵图等)方式显示的统计分析结果,内容包括: ·网络总体流量实时监控统计:如当前和平均网络利用率、总的和当前的帧数、字节数、总网络节点数和激活的网络节点数、当前和总的平均帧长等。 ·协议使用和分布统计:如协议类型、协议数量、协议的网络利用率、协议的字节数以及每种协议中各种不同类型的帧的数量等。Sniffer包含通用的TCP和UDP网络应用协议如HTTP, Telnet, SNMP, FTP等。同时,Sniffer 也具有特有的灵活性允许增加自定义的应用。一旦应用协议加入Sniffer,针对应用的所有的监控、报警和报告便自动生效;

·包尺寸分布统计:如某一帧长的帧所占百分比,某一帧长的帧数等。 ·错误信息统计:如错误的CRC校验数、发生的碰撞数、错误帧数等; ·主机流量实时监控统计:如进出每个网络节点的总字节数和数据包数、前x个最忙的网络 节点等;

话节点对等;

·Sniffer还提供历史统计分析功能,可以使用户看到网络中一段时间内的流量运行状况,帮助用户更好的进行流量分析和监控。

2.应用响应时间监控和分析 Sniffer 在监控网络流量和性能的同时,更加关注在网络应用的运行状况和性能管理,应用响应时间(ART)功能是Sniffer中重要的组成部分,不仅提供了对应用响应时间的实时监控,也提供对于应用响应时间的长期监控和分析能力。 首先ART监控功能提供了整体的应用性能响应时间,让用户以多种方式把握当前网络通讯中的各类应用响应时间的对比情况,如客户机/服务器响应时间、服务器响应时间,最 快响应时间、最慢响应时间、平均响应时间和90%的请求的响应时间等。

数据传输过程详解

数据传输过程详解 一、FTP客户端发送数据到FTP服务器端,详述其工作过程。两台机器的连接情况如下图所示: 详细解答如下 1.1、假设初始设置如下所示: 客户端FTP端口号为:32768 协议是水平的,服务是垂直的。 物理层,指的是电信号的传递方式,透明的传输比特流。 链路层,在两个相邻结点间的线路上无差错地传送以帧为单位的数据。 网络层,负责为分组交换网上的不同主机提供通信,数据传送的单位是分组或包。 传输层,负责主机中两个进程之间的通信,数据传输的单位是报文段。 网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。 1.3、数据包的封装过程 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。 1.4、工作过程 (1)在PC1客户端,将原始数据封装成帧,然后通过物理链路发送给Switch1的端口1。形成的帧为: 注:发送方怎样知道目的站是否和自己在同一个网络段?每个IP地址都有网络前缀,发送方只要将目的IP地址中的网络前缀提取出来,与自己的网络前缀比较,若匹配,则意味着数据报可以直接发送。也就是说比较二者的网络号是否相同。本题中,PC1和PC2在两个网络段。 (2)Switch1收到数据并对数据帧进行校验后,查看目的MAC地址,得知数据是要

网络通信协议分析及应用试题集6828(I)

1. OSI标准中,采用的是三级抽象:体系结构,服务定义,协议说明。 2. TCP/IP协议族中,使用了三个不同层次的地址,主机网络层或网络接口层使用了:物理地址(MAC地址)。 3. TCP/IP协议族中,使用了三个不同层次的地址,传输层使用了:端口地址。 4. TCP/IP协议族中,使用了三个不同层次的地址,网络层使用了:逻辑地址(IP地址)。 5. 根据所提供的服务方式的不同,端口又可分为TCP协议端口和UDP协议端口两种。 6. 从端口的性质来分,通常可以分为以下三类,注册端口(Registered Ports)松散地绑 定于一些服务。 7. 从端口的性质来分,通常可以分为三类,FTP和HTTP服务需要使用:公认端口(Well Kno wn Ports)类型。 8. 从端口的性质来分,通常可以分为三类,动态或私有端口(Dynamic and/or Private Po rts)容易被黑客和木马程序利用。 9. 接口是同一结点内相邻层之间交换信息的连接点。 10. CCITT与ISO的工作领域是不同的:CCITT 主要是考虑通信标准的制定。 11. CCITT与ISO的工作领域是不同的:ISO主要是考虑信息处理与网络体系结构。 12. OSI参考模型和TCP/IP参考模型只是描述了一些概念,用来协调进程间通信标准的制定。 13. 通信服务可以分为两大类:面向连接服务(connect-oriented service)和无连接服 务(connectless service)。 14. 网络数据传输的可靠性一般通过确认和重传机制保证。 15. 通信协议包括:面向连接与确认服务;面向连接与不确认服务;无连接与确认服务;无连接与不确认服务四种类型。 16. IP协议是无连接的、提供“尽力而为”服务的网络层协议。 17. 17. INTERNET使用了不同类型的地址概念,应用层使用了域名(DNS)、电子邮件址、URL等地址。 18. 网络协议是由程序和进程来完成的。 19. B类IP地址中的一个私有网络地址,如果需要50个子网,网络掩码应该为(点十进制表示):。 20. C类IP地址中的一个私有网络地址,从网络地址开始。

网络数据包协议分析

网络数据包协议分析 一、实验目的 1.学习网络协议分析工具Ethereal的使用方法; 2.截获数据并对它们观察,分析其中2中协议(arp&tcp)数据包包头各数据位的含义, 了解协议的运行机制。 二、实验步骤 1.安装并打开Ethereal软件; 2.利用”运行cmd”打开命令提示符,输入“ping”确认网络连接是否完成; 3.点击capture->options选择网卡(默认有线); 4.点击capture开始抓包; 5.打开浏览器,访问一个网站,这样才可以抓到tcp的数据包; 6.点击stop停止抓包。 三、实验结果分析 1.Arp---address resolution protocol,地址解析协议的缩写,就是主机在发送帧前将目 标IP地址(32位)转换成目标MAC地址(48位)的过程。它属于链路层的协议。

ARP协议数据包包头数据位分析: 1.第一栏显示帧信息。 Frame 280 (60 bytes on wire,60 bytes capture)是指该数据包含有60个字节,ethereal软件截获了60个字节。点击打开,里面包括了到达时间、相对前一个包的时间延迟、传输时间、帧号280、包长度(60字节)和捕获到的长度(60字节)。 2.第二栏显示以太网信息。 源MAC地址是f4:6d:04:3a:62:33,目的MAC地址是ff:ff:ff:ff:ff:ff。 3.第三栏显示因特网协议信息。 它包括了硬件类型:以太网;协议类型是IP协议和发送方的IP地址与MAC地址,也包括了目的IP地址和MAC地址。 2.tcp—transition control protocol,传输控制协议的缩写。是一种面向连接(连接导向) 的、可靠的、基于字节流的传输层通信协议。

数据包捕获与解析

数据包捕获与解析课程设计报告 学生姓名:董耀杰 学号:1030430330 指导教师:江珊珊

数据包捕获与分析 摘要本课程设计通过Ethereal捕捉实时网络数据包,并根据网络协议分析流程对数据包在TCP/IP各层协议中进行实际解包分析,让网络研究人员对数据包的认识上升到一个感性的层面,为网络协议分析提供技术手段。最后根据Ethereal的工作原理,用Visual C++编写一个简单的数据包捕获与分析软件。 关键词协议分析;Ethereal;数据包;Visual C++ 1引言 本课程设计通过技术手段捕获数据包并加以分析,追踪数据包在TCP/IP各层的封装过程,对于网络协议的研究具有重要的意义。Ethereal是当前较为流行的图形用户接口的抓包软件,是一个可以用来监视所有在网络上被传送的包,并分析其内容的程序。它通常被用来检查网络工作情况,或是用来发现网络程序的bugs。通过ethereal对TCP、UDP、SMTP、telnet和FTP等常用协议进行分析,非常有助于网络故障修复、分析以及软件和协议开发。,它以开源、免费、操作界面友好等优点广为世界各地网络研究人员使用为网络协议分析搭建了一个良好的研究平台。 1.1课程设计的内容 (1)掌握数据包捕获和数据包分析的相关知识; (2)掌握Ethreal软件的安装、启动,并熟悉用它进行局域网数据捕获和分析的功能; (3)设计一个简单的数据包捕获与分析软件。 1.2课程设计的要求 (1)按要求编写课程设计报告书,能正确阐述设计结果。 (2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。 (3)学会文献检索的基本方法和综合运用文献的能力。 (4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。

实验1:网络数据包的捕获与协议分析

实验报告 ( 2014 / 2015 学年第二学期) 题目:网络数据包的捕获与协议分析 专业 学生姓名 班级学号 指导教师胡素君 指导单位计算机系统与网络教学中心 日期2015.5.10

实验一:网络数据包的捕获与协议分析 一、实验目的 1、掌握网络协议分析工具Wireshark的使用方法,并用它来分析一些协议; 2、截获数据包并对它们观察和分析,了解协议的运行机制。 二、实验原理和内容 1、tcp/ip协议族中网络层传输层应用层相关重要协议原理 2、网络协议分析工具Wireshark的工作原理和基本使用规则 三、实验环境以及设备 Pc机、双绞线、局域网 四、实验步骤 1.用Wireshark观察ARP协议以及ping命令的工作过程: (1)打开windows命令行,键入“ipconfig -all”命令获得本机的MAC地址和缺省路由器的IP地址;结果如下: (2)用“arp -d”命令清空本机的缓存;结果如下 (3)开始捕获所有属于ARP协议或ICMP协议的,并且源或目的MAC地址是本机的包。(4)执行命令:ping https://www.360docs.net/doc/ca11320161.html,,观察执行后的结果并记录。

此时,Wireshark所观察到的现象是:(截图表示) 2.设计一个用Wireshark捕获HTTP实现的完整过程,并对捕获的结果进行分析和统计。(截 图加分析) 3.设计一个用Wireshark捕获ICMP实现的完整过程,并对捕获的结果进行分析和统计。要求:给出捕获某一数据包后的屏幕截图。以16进制形式显示其包的内容,并分析该ICMP 报文。(截图加分析) 4. 设计一个用Wireshark捕获IP数据包的过程,并对捕获的结果进行分析和统计(截图加分析) 要求:给出捕获某一数据包后的屏幕截图。以16进制形式显示其包的内容,并分析在该数据包中的内容:版本首部长度、服务类型、总长度、标识、片偏移、寿命、协议、源Ip地址、目的地址 五、实验总结

网络数据包捕获工具的实现

本文来自中国协议分析网技术论坛,转载请注明 sniffer tcp http ospf rtp dhcp Sniffer EtherealWinpcap 其它技术返回首页当前位置: 网站首页>>协议分析>>Winpcap>> 利用WinPcap技术捕获数据包时间:2006-11-14 来源: 作者: 点击:849次收藏到: 前言随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数据包捕获,网络管理员才能对所捕获的数据进行一系列 前言 随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数据包捕获,网络管理员才能对所捕获的数据进行一系列的分析,从而进行可靠的网络安全管理。 1winpcap简介 WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤。WinPcap 为用户级的数据包提供了Windows 下的一个平台。WinPcap 是BPF 模型和Libpcap 函数库在Windows 平台下网络数据包捕获和网络状态分析的一种体系结构,这个体系结构是由一个核心的包过滤驱动程序,一个底层的动态连接库Packet.dll 和一个高层的独立于系统的函数库Libpcap 组成。底层的包捕获驱动程序实际为一个协议网络驱动程序,通过对NDIS 中函数的调用为Win95、Win98、WinNT、和Win2000 提供一类似于UNIX 系统下Berkeley Packet Filter 的捕获和发送原始数据包的能力。Packet.dll 是对这个BPF 驱动程序进行访问的API 接口,同时它有一套符合Libpcap 接口(UNIX 下的捕获函数库)的函数库。WinPcap的结构图如图1。 WinPcap 包括三个部分:第一个模块NPF(Netgroup Packet Filter),是一个虚拟设备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。第二个模块packet.dll为win32平台提供了一个公共的接口。不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同。调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。第三个模块Wpcap.dll是不依赖于操作系统的。它提供了更加高层、抽象的函数。 packet.dll和Wpcap.dll:packet.dll直接映射了内核的调用。Wpcap.dll提供了更加友好、功能更加强大的函数调用。WinPcap的优势提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力。 2网络数据包捕获的原理 以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。IEEE802.3 标准的以太网采用的是持续CSMA 的方式,正是由于以太网采用

数据包从源到目的地的传输过程

数据包从源到目的地的传输过程 步骤1:PC1 需要向PC2 发送一个数据包 PC1 将IP 数据包封装成以太网帧,并将其目的MAC 地址设为R1 FastEthernet 0/0 接口的MAC 地址。 PC1 是如何确定应该将数据包转发至R1 而不是直接发往PC2?这是因为PC1 发 现源IP 地址和目的IP 地址位于不同的网络上。 PC1 通过对自己的IP 地址和子网掩码执行AND 运算,从而了解自身所在的网络。同样,PC1 也对数据包的目的IP 地址和自己的子网掩码执行AND 运算。如果两次运算结果一致,则PC1 知道目的IP 地址处于本地网络中,无需将数据包转发到默认网关(路由器)。如果AND 运算的结果是不同的网络地址,则PC1 知道目的IP 地址不在本地网络中,因而需要将数据包转发到默认网关(路由器)。 注:如果数据包目的IP 地址与PC1 子网掩码进行AND 运算后,所得到的结果并非PC1 计算得出的自己所在的网络地址,该结果也未必就是实际的远程网络地址。在PC1 看来,只有当掩码和网络地址相同时,目的IP 地址才属于本地网络。远程网络可能使用不同的掩码。如果目的IP 地址经过运算后得到的网络地址不同于本地网络地址,则PC1 无法知道实际的远程网络地址,它只知道该地址不在本地网络上。 PC1 如何确定默认网关(路由器R1)的MAC 地址?PC1 会在其ARP 表中查找默认网关的IP 地址及其关联的MAC 地址。 如果该条目不存在于ARP 表中会发生什么情况?PC1 会发出一个ARP 请求,然后路由器R1 作出ARP 回复。

步骤2:路由器R1 收到以太网帧 1. 路由器R1 检查目的MAC 地址,在本例中它是接收接口FastEthernet 0/0 的MAC 地址。因此,R1 将该帧复制到缓冲区中。 2. R1 看到“以太网类型”字段的值为0x800,这表示该以太网帧的数据部分包含IP 数据包。 3. R1 解封以太网帧。

网络协议分析期末考试

2008-2009学年第一学期 网络协议分析 期末试卷(A卷)参考答案 第一题判断题(20小题,共20分,对打√,错打×) 1.没有完成两个数据包握手称为双向“握手”,是一种不安全的进程。(√) 2.查阅网上对象所有域名和地址的术语称为统一资源定位符URL。(×) 3.动态端口也叫临时端口。(√) 4.用于描述DNS数据库段的数据是一种ASCII文本数据。(√) 5.SOCKS是一种Socket的实现机制。(×) 6.区分服务也叫分用服务,传输层用于向上传送通信数据。(×) 7.RIPv2最多有15个网络直径,OSPFv2最多有128个网络直径。(×) 8.DHCP响应消息包含DHCP请求消息。(√) 9.定界符是PDU的有效数据。(√) 10.ARPA是一种与Mac地址及IP地址相关的一种协议。(×) 11.地址请求是一种ARP服务请求。(×) 12.可接收的使用策略AUP是一种格式文档策略。(√) 13.Apple Talk是一种组安全策略协议。(×) 14.权威服务器是PKI中一种发放安全证书的服务器。(×) 15.自治系统是一组单一管理权限下的路由器。(√) 16.区分服务也叫分用服务,传输层用于向上传送通信数据。(×) 17.带宽是一种跨网络信息数量的评估数据。(√) 18.绑定确认是一种必选数据。(×)

19.定界符是PDU的有效数据。(√) 20.黑洞是数据包无记录丢失的网络节点。(√)第二题单项选择题(20小题,共20分) 1、下面关于ARP协议的功能论述正确的是( C )。 A、ARP协议根据本地主机的IP地址获取远程主机的MAC地址; B、ARP协议根据远程主机的MAC地址获取本地主机的IP地址; C、ARP协议根据本地主机的IP地址获取本主机的MAC地址; D、ARP协议根据本地主机的MAC地址获取本主机的IP地址; 2、计算机网络体系结构在逻辑功能构成上存在有两个边界,它们是( B )。 A、协议栈边界和操作系统边界; B、协议边界和OS边界; C、数据单元边界和协议边界; D、操作系统边界和协议栈分层边界; 3、下面WAN或LAN网络中关于主机数量论述不正确的是( C )。 A、网络中使用的协议类型越多,网络中的主机数就越少; B、网络中划分的物理区域越多,网络中的主机数就越少; C、网络中划分的广播区域越多,网络中的主机数就越少; D、网络中使用2层交换机越多,网络中的主机数就越少; 4、B类网络172.16.0.0的广播地址是( C )。 A、172.16.0.1 B、172.16.0.255 C、172.16.255.255 D、172.16.255.0 5、在进行网络IP地址配置时,有时会发生IP地址冲突,TCP/IP协议族中检查IP地址是否冲突的网络协议是( A )。 A、ARP协议 B、PARP协议 C、IP协议 D、802.x协议 6、下面关于ICMP协议论述不正确的是( C )。 A、ICMP协议同IP协议一样位于网络层; B、Traceroute和Ping命令进行网络检测时使用ICMP报文;

相关文档
最新文档