当前位置: 代码迷 >> 综合 >> seed lab 2020 packet sniffing and spoofing lab
  详细解决方案

seed lab 2020 packet sniffing and spoofing lab

热度:53   发布时间:2024-03-05 22:14:55.0

本实验均使用 python3 scapy 完成

本文可能使用到的同时发包和收包的程序如下:

1.	import subprocess  
2.	from time import *  
3.	from sys import *  
4.	  
5.	sniffer=subprocess.Popen(['python3','tcp_sniffer.py'])  
6.	sleep(0.5)  
7.	sender=subprocess.run(args=['python3','tcp_sender.py'],stdout=subprocess.PIPE)  
8.	sleep(0.5)  
9.	sniffer.kill()  
10.	  
11.	print('\n\n'+str(sender.stdout,encoding='utf-8'))  
12.	exit()

Task1.1A

通过设置filter规则为’icmp’,可以过滤掉其他的数据包;通过指定prn的参数为显示数据包的函数在终端打印数据包。在执行sniffer.py脚本的同时,使用ping发出icmp数据包。
当使用sudo执行脚本时可以正常捕获icmp包,如下图:
在这里插入图片描述
当不使用sudo执行脚本时,显示操作不被允许,根据报错可以看到这是因为__init__socket.socket.init(self,family,type,proto,fileno)函数的执行需要更高的权限。
在这里插入图片描述

Task1.1B

(1)
捕获icmp的操作与task1.1A相同。

(2)

主机ip为10.222.182.210。

Seedlab主机ip:
在这里插入图片描述

编写嗅探脚本tcp_sniffer.py:

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='tcp and src host 10.0.2.15 and dst port 23',prn=print_pkt)

编写发包脚本tcp_sender.py:

1.	from scapy.all import *  
2.	  
3.	ip=IP()  
4.	ip.src='10.0.2.15'  
5.	ip.dst='10.222.182.210'  
6.	tcp=TCP()  
7.	tcp.dport=23  
8.	send(ip/tcp) 

收到数据包结果:
在这里插入图片描述
(3)
发包脚本subnet_sender.py:


1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='tcp and src host 10.0.2.15 and dst port 23',prn=print_pkt)

编写发包脚本tcp_sender.py:

1.	from scapy.all import *  
2.	  
3.	ip=IP()  
4.	ip.src='10.0.2.15'  
5.	ip.dst='10.222.182.210'  
6.	tcp=TCP()  
7.	tcp.dport=23  
8.	send(ip/tcp) 

收到数据包结果:
在这里插入图片描述
(3)
发包脚本subnet_sender.py:

1.	from scapy.all import *  
2.	  
3.	send(IP(dst='128.230.0.0/16')) 

嗅探脚本subnet_sniffer.py:

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='dst net 128.230.0.0/16',prn=print_pkt) 

利用script.py执行抓到数据包结果如下:
在这里插入图片描述

Task1.2

使用icmp_spoofing.py发包:

1.	from scapy.all import *  
2.	  
3.	send(IP(dst='10.222.182.210')/ICMP())

用wireshark看到来回的数据包:

在这里插入图片描述

Task1.3

使用下面的tarcerout.py脚本发送syn包并接收返回包:

1.	from scapy.all import *  
2.	  
3.	ans,unans=sr(IP(dst='www.baidu.com', ttl=(4,25))/TCP(flags=0x2))  
4.	for snd,rcv in ans:  
5.	    print(snd.ttl, rcv.src, isinstance(rcv.payload, TCP))

实验结果如下:

Task1.4

用sniff_spoof.py截获本网段的数据包并发出回应包:

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        send(IP(src=pkt[IP].dst,dst=pkt[IP].src)/ICMP(type='echo-reply',code=0,id=pkt[ICMP].id,seq=pkt[ICMP].seq))  
5.	  
6.	pkt=sniff(filter='icmp[icmptype]==icmp-echo',prn=print_pkt) 

被劫持的ping应答:
在这里插入图片描述

可以看到上面的应答包明显比下面正常情况下的应答包速度快很多:
在这里插入图片描述

task2.1A

使用下面icmp_sniffer.py截获数据包

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='icmp',prn=print_pkt)

结果截图:
在这里插入图片描述

qestion1:这个程序首先在包到达后通过filter指定的参数判断是否是符合条件的包,如果是就调用prn指向的函数执行,并且将数据包返回给等号左边的变量
qestion2:因为scapy涉及到数据包的监听和修改,这些操作如果不根据用户权限进行限制将会造成安全问题
qestion3:使用混杂模式后可以截获本网段下另一个机器的ping包,不使用则不行

在这里插入图片描述

task2.1b

使用下面脚本捕获icmp和ip为10.0.2.15和192.168.43.16之间的icmp:

1.	from scapy.all import *  
2.	def print_pkt(pkt):  
3.	        pkt.show()  
4.	  
5.	pkt=sniff(filter='icmp && host 10.0.2.15 && host 10.219.160.70',prn=print_pkt) 

实验结果:

在这里插入图片描述

用下面的代码捕获tcp和指定端口的数据包:

1.	from scapy.all import *  
2.	def print_pkt(pkt):  
3.	        pkt.show()  
4.	  
5.	pkt=sniff(filter='tcp && dst portrange 10-100',prn=print_pkt) 

ssh的端口号为22,可以用作测试。
在这里插入图片描述

截获的ssh协议包:
在这里插入图片描述

task2.1c

将端口设为25监听telnet的报文:

1.	from scapy.all import *  
2.	def print_pkt(pkt):  
3.	        pkt.show()  
4.	  
5.	pkt=sniff(filter='tcp port 25',prn=print_pkt) 

密码截图省略。

task2.2A

发包脚本:

1.	from scapy.all import *  
2.	  
3.	send(IP(src='10.0.2.15',dst='10.219.160.70')) 

用wireshark截获的数据包

在这里插入图片描述

task2.2b

向www.baidu.com发送请求icmp包:

1.	from scapy.all import *  
2.	  
3.	send(IP(dst='www.baidu.com',src='10.0.2.15')/ICMP(type=8,code=0)) 

收到来自百度的应答报文:
在这里插入图片描述

question4:将数据包长度改为200依然能成功发出数据包
在这里插入图片描述

question5:用python不需要自己计算校验和
question6:函数内部的调用需要root权限,如果没有权限会停在下面的函数
在这里插入图片描述

task2.3

使用python和task1.4的操作相同。

  相关解决方案