利用Wireshark对本地回环数据包及宿主机、虚拟机数据包进行抓取
最近实验室布置了一个作业:首先编写通信程序,后利用wireshark对我编写的通信程序中传递的数据包进行抓取并进行解析。一、本地回环数据包的抓取首先是通信程序的编写,编写了基于socket的通信程序,为了简便讲解,以下我选取了一个非常简单的socket通信程序:import socketimport sysHOST=''PORT=6666s=socket.socket(soc...
最近实验室布置了一个作业:首先编写通信程序,后利用wireshark对我编写的通信程序中传递的数据包进行抓取并进行解析。
一、本地回环数据包的抓取
首先是通信程序的编写,编写了基于socket的通信程序,为了简便讲解,以下我选取了一个非常简单的socket通信程序:
import socket
import sys
HOST=''
PORT=6666
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print('Socket created')
try:
s.bind((HOST,PORT))
except socket.error:
print('Bind failed.')
sys.exit()
print('Socket bind complete')
s.listen(10)
print ('Socket now listening')
conn, addr = s.accept()
print( 'Connected with ' + addr[0] + ':' + str(addr[1]))
received_mes=conn.recv(4096)
print(received_mes.decode())
data='received successfully'
conn.sendall(data.encode())
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ('Socket Created')
host = '127.0.0.1'
port = 6666
try:
remote_ip = socket.gethostbyname(host)
except socket.gaierror:
print('Hostname could not be resolved. Exiting')
sys.exit()
print('Ip address of ' + host + ' is ' + remote_ip)
s.connect((host, port))
print('Socket Connected to ' + host + ' on ip ' + remote_ip)
message= ("hello server")
try:
s.send(message.encode())
except socket.error:
print('Send failed')
sys.exit()
print('Message send successfully')
reply = s.recv(4096)
print(reply.decode())
两代码分别代表服务端与客户端,首先为了方便,我将客户端的ip设置为127.0.0.1,读者可以发现,此程序即为在本机上进行通信,但是传统的Wireshark自带的Winpcap嗅探器,无法对本地回环的流量包进行抓取,而如今的新兴嗅探器:Npcap可以实现这一点。于是我在已经安装了Winpcap的电脑上,进行了Npcap的安装。方法如下:
1.首先将Winpcap卸载,可以利用Winpcap自带的卸载工具进行,卸载完毕后,进行Npcap的安装,如果成功安装,那真是太好了,重新启动Wireshark后,可以看到捕获器的一栏中多了一个Npcap的选项,点击后即可进行抓取。
https://github.com/nmap/npcap/releases:Npcap的安装链接。
2.但很多人在安装Npcap时,可能会遇到下述的问题:
遇到此类问题,有三种解决方式:
1.可能是由于Winpcap卸载不彻底导致的,可以手动找到Winpcap的残留文件,进行删除:
winpcap关键模块
32位系统:
C:\Windows\system32\wpcap.dll
C:\Windows\system32\Packet.dll
C:\Windows\system32\WanPacket.dll
C:\Windows\system32\pthreadVC.dll
C:\Windows\system32\drivers\npf.sys
64位系统:
C:\Windows\SysWOW64\wpcap.dll
C:\Windows\SysWOW64\Packet.dll
C:\Windows\SysWOW64\WanPacket.dll
C:\Windows\SysWOW64\pthreadVC.dll
C:\Windows\System32\drivers\npf.sys
删除完毕后,再进行Npcap的安装,看是否成功。
2.若方法1无法实现,则我们首先将Wireshark等软件全部卸载,按方法1,将系统内的残留文件一并删除后,先安装Npcap,再安装Wireshark,之后看能否成功。
3.可以访问Npcap官网,禁用组服务,https://nmap.org/npcap/,看能否解决问题
若三种方法均不能解决,那很遗憾,我也没有其他的解决方法(我就是这么的不幸)
于是我决定,不进行本地的回环数据包的抓取,而进行宿主机与虚拟机的通信
二、宿主机、虚拟机数据包的抓取
为了能够使宿主机与虚拟机进行通信,我们首先需要使虚拟机同宿主机连通,在这里我们选用NAT连接模式,对虚拟机与宿主机的ip进行设置,使其在同一个局域网内。
如图为虚拟机的ip设置:
如图为宿主机的ip设置:
通过ipv4和子网掩码将其设置到同一个局域网里,之后我们将socket通信程序中的ip地址稍作改动(例如我们将宿主机作为客户端,将其连接的IP地址设置为虚拟机的IP地址。
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ('Socket Created')
host = '192.168.236.190'
port = 6666
try:
remote_ip = socket.gethostbyname(host)
except socket.gaierror:
print('Hostname could not be resolved. Exiting')
sys.exit()
print('Ip address of ' + host + ' is ' + remote_ip)
s.connect((host, port))
print('Socket Connected to ' + host + ' on ip ' + remote_ip)
message= ("hello server")
try:
s.send(message.encode())
except socket.error:
print('Send failed')
sys.exit()
print('Message send successfully')
reply = s.recv(4096)
print(reply.decode())
之后进行通信,如上述公式,客户端像服务端发送了:hello server 服务器像客户端回复了一句话:message send successfully.
我们利用wireshark进行数据包的抓取:
可以看到宿主机向虚拟机发送的数据:hello server
通过上述流程,我们锻炼了最基本的网络编程能力、wireshark抓包、局域网的ip设置、虚拟机的使用以及上网查找资料等动手能力,希望对大家有所帮助。
更多推荐
所有评论(0)