Scapy 伪造网络数据包
2016-04-20 10:02
357 查看
实验说明
这里说明的数据包伪造只是伪造数据包发送的源地址。网络上有一些有人说可以对数据包内容的伪造(修改)和转发,不过目前还没找到这一点是如何完成的,甚至是在官方提供的文档上也没有看到这一类操作的说明。版权说明
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文作者:Coding-Naga
发表日期: 2016年4月20日
本文链接:http://blog.csdn.net/lemon_tree12138/article/details/51198116
来源:CSDN
更多内容:分类 >> 黑客的隐形衣
目录
实验说明版权说明
目录
实验环境
实验过程
基于 TCP 协议正常抓包
基于 TCP 伪造数据包
基于 UDP 协议正常抓包
基于 UDP 协议伪造数据包
嗅探及伪造
结论与总结
实验环境
两台 CentOS6.5 虚拟主机Python 2.6.6
Scapy 2.3.1-dev
实验过程
基于 TCP 协议正常抓包
(1) 发送端>>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.135', dst='172.16.2.91')/TCP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)
(2) 接收端
>>> receive = sniff(filter="tcp and host 172.16.2.135")
>>> receive <Sniffed: TCP:2 UDP:0 ICMP:0 Other:0> >>> receive[0] <Ether dst=08:00:27:24:b8:a3 src=08:00:27:e2:f7:db type=0x800 |<IP version=4L ihl=5L tos=0x0 len=51 id=1 flags= frag=0L ttl=64 proto=tcp chksum=0x1dc2 src=172.16.2.135 dst=172.16.2.91 options=[] |<TCP sport=italk dport=personal_agent seq=0 ack=0 dataofs=5L reserved=0L flags=S window=8192 chksum=0x9b22 urgptr=0 options=[] |<Raw load='Hello Scapy' |>>>> >>> receive[0].load 'Hello Scapy'
通过实验,在正常情况下,基于 TCP 协议可以正常捕获网络数据包。
基于 TCP 伪造数据包
(1) 发送端>>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.134', dst='172.16.2.91')/TCP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)
(2) 接收端
由于实验中是修改了源地址进行伪造数据包,所以,这里需要进行 2 次嗅探操作。如下:
>>> receive = sniff(filter="tcp and host 172.16.2.134") >>> receive <Sniffed: TCP:0 UDP:0 ICMP:0 Other:0>
>>> receive = sniff(filter="tcp and host 172.16.2.135") >>> receive <Sniffed: TCP:0 UDP:0 ICMP:0 Other:0>
通过实验,如果源地址被伪造,基于 TCP 协议的通信将会被阻断。原因就是 TCP 通信时的三次握手。当服务器无法与客户端之间进行三次握手操作时,通信将不能继续进行下去。
基于 UDP 协议正常抓包
(1) 发送端>>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.135', dst='172.16.2.91')/UDP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)
(2) 接收端
>>> receive = sniff(filter="udp and host 172.16.2.135")
>>> receive <Sniffed: TCP:0 UDP:1 ICMP:0 Other:0> >>> receive[0].load 'Hello Scapy'
通过实验,基于 UDP 协议的通信正常。接收端可以接收到发送端发送的数据。
基于 UDP 协议伪造数据包
(1) 发送端>>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.134', dst='172.16.2.91')/UDP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)
这里与正常情况下唯一的区别在于修改了源 IP 地址。
(2) 接收端
监听主机 172.16.2.135
>>> receive = sniff(filter="udp and host 172.16.2.135")
>>> receive <Sniffed: TCP:0 UDP:0 ICMP:0 Other:0>
监听主机 172.16.2.134
>>> receive = sniff(filter="udp and host 172.16.2.134")
>>> receive <Sniffed: TCP:0 UDP:1 ICMP:0 Other:0> >>> receive[0].load 'Hello Scapy'
通过实验,基于 UDP 协议的网络通信中。即使伪造了源 IP 地址,接收端仍然可以接收到伪造之后的数据包。
嗅探及伪造
在上面的实验中,只是对伪造源 IP 地址过程的再现。这里再做一个在网络通信的过程中的嗅探与伪造。这里的实验部署如下:
1. 一台运行 UDP 接收端 python 程序的主机
2. 一台运行 UDP 发送端 python 程序的主机
3. 在发送端再运行一个 Scapy Sniff 程序
4. 在发送端向接收端发送一个随机数据包
5. 嗅探程序在嗅探的数据中筛选出合适的目标地址和端口
6. 再由伪造程序向目标地址发送伪造的数据
相关部分的代码如下:
对 UDP 通信的嗅探脚本
# encoding=utf-8 from scapy.all import * receive = sniff(filter="udp and host 172.16.2.135", count=100) receive.show()
通过对 UDP 通信的嗅探,伪造数据包
# encoding=utf-8 from scapy.all import * import utils import os os.system("python sniff_script.py >> sniff.log") def forge(address, port): """ 通过嗅探到的数据,进行伪造数据 """ forge_data = "This is forge data." pkt = IP(src='172.16.2.200', dst=address)/UDP(sport=12345, dport=port)/forge_data send(pkt, inter=1, count=3) pass sniff_file = open("sniff.log", "rb") for data in sniff_file.readlines(): result = utils.match(data) if result is not None and result[0] != '172.16.2.135': print(result) forge(result[0], int(result[1])) pass pass
当运行嗅探伪造程序之后,这里表明截获了两条数据。而且,程序已经把伪造的数据发送出去了。
下面的信息是在接收端观察发现的,这里表明接收端程序已经接收到嗅探伪造程序发送的伪造数据了。
结论与总结
通过上面的实验以及实验说明,我们可以得出如下几条结论:1. 使用基于 TCP 协议的通信不可以对源 IP 地址进行伪造
2. 使用基于 UDP 协议的通信可以对源 IP 地址进行伪造
TCP 不能伪造源 IP 地址是因为 TCP 协议中的三次握手的存在,如果源 IP 地址被修改,那么三次握手将无法达成。而 UDP 则不同,UDP 中不存在三次握手,那么发送端就只要发送数据即可,而接收端只要接收数据即可。所以,在 TCP 中不能对源 IP 地址进行伪造,而 UDP 中则可以。
相关文章推荐
- GPRS网络概述
- HTTP 中 get 与 post 的区别
- TCP和TCP/IP的区别
- HTTPS连接前的几毫秒发生了什么?
- TCP/IP、Http、Socket的区别
- HTTPS的误解(二)
- TCP/IP 网络编程 (三)
- HTTPS的误解(一)
- iOS版上传数据到阿里后台~ AliyunOSSiOS(转载自http://www.jianshu.com/p/27435fe627be)
- HTTPS的误解(二)
- 网络名词
- 网络---一篇文章详解请求头Host的概念
- 民生银行信用卡心得---网络整理
- dd通过网络克隆硬盘或者备份
- 【Https】iOS端两种Https数据传输加密方法
- 面试之路(4)-TCP/IP/HTTP概述
- 面试之路(4)-TCP/IP/HTTP概述
- 面试之路(4)-TCP/IP/HTTP概述
- TCP笔记
- Golang - Mysql ang Http Basic fucntions