网络嗅探与协议分析 验收作业
任务详情
(1)根据教材参考代码,编写有个简单网络抓包工具。要求核心代码和运行结果截图1-2张。(3分)代码push到码云(1分)
(2)找一个网站或者搭建一个本地网站,登录网站,并嗅探,分析出账号和密码,结果截图1-2张。(3分)可以用邮箱、各类博客、云班课,只能分析自己的账号,严禁做各类攻击,否则后果自负。
实践过程
任务一
在网上找的JAVA语言编写的简易抓包工具,粗略读懂代码,添加了注释
功能介绍:
1.获取网络设备列表。
2.选择网卡并打开。
3.当捕获数据包时,可能需要设置过滤器。
4.捕获数据包或者发送数据包。
5.统计数据的流量
核心代码:
// 获取网络接口列表
public static void getDevices() {
//getDeviceList()返回一个网络设备列表
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
for (int i = 0; i < devices.length; i++) {
//name:这个设备的名称;description:网卡是XXXX牌子XXXX型号之类的描述
System.out.println(i + ": " + devices[i].name + "("
+ devices[i].description + ")");
//datalink_name 该网络设备所对应数据链路层的名称。具体来说,例如Ethernet10M、100M、1000M等等
System.out.println(" datalink: " + devices[i].datalink_name + "("
+ devices[i].datalink_description + ")");
//输出网卡的MAC地址
System.out.print(" MAC address:");
for (byte b : devices[i].mac_address)
System.out.print(Integer.toHexString(b & 0xff) + ":");
System.out.println();
for (NetworkInterfaceAddress a : devices[i].addresses)
System.out.println (" address:" + a.address + " " + a.subnet
+ " " + a.broadcast);
}
// 使用逐个捕获方法, 从网络接口捕获数据包
public static void oneByOneReceiver(int index, int time) throws IOException {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
JpcapCaptor captor = JpcapCaptor.openDevice(devices[index], 65535,
false, 20);
//创建一个文件并向文本文件写入数据包数据,文件输入则是packets.txt(java.io.File)
PrintWriter pw = new PrintWriter(new FileWriter(new File("packets.txt")));
// 设置过滤器
captor.setFilter("ip", true);
int counter = 0;
Packet packet;
long startTime = System.currentTimeMillis();
while (startTime + time * 60 * 10 >= System.currentTimeMillis()) {
packet = captor.getPacket();//抓取数据包
System.out.println(packet);
//将数据包写入一个txt文档内
if (packet != null) {
String ips = packet.toString().split("\\s+")[1];
pw.write(ips);
pw.println();
counter++;
}
}
pw.close();
CounterPackets cp = new CounterPackets();//自定义类
cp.readPackets();//自定义方法
cp.print();
//输出捕获到的包数
System.out.println("PacketNumbers:" + counter);
}
//获取源地址和目的地址
public String[] getIps (String ips) {
StringBuffer sb = new StringBuffer(ips);
for (int i = 0; i < ips.length(); i++) {
//对文本中的ip地址进行分离化
if (ips.charAt(i) == '/' || ips.charAt(i) == '>' || ips.charAt(i) == '-') {
sb.replace(i, i + 1, " ");
}
}
ips = sb.toString().trim();
return ips.split("\\s+");
}
//将结果打印到控制台
public void print() {
System.out.println("源地址" + " " + "目的地址" + " " );
Iterator it = counter.keySet().iterator();
while (it.hasNext()) {
String index = (String)it.next();
String[] ips = index.split("\\s+");
String srcIp = String.format("%-6s", ips[0]);
String dstIp = ips[1];
int number = counter.get(index);
System.out.println(srcIp + " " + dstIp + " " + number);
}
}
运行结果截图
将本机的所有网卡的相关信息输出,因为本机连接的网络是WLAN,本机IP地址是192.168.1.6,这里我们可以选择网卡号3,来抓取IP数据包
结果截图如图所示:
任务二
首先找一个简单(最好HTTP数据包是以明文传输)可登录的网站,这里我是选择我的电脑本地自建的简易网站,网站的搭建使用工具主要包括Mysql-front、PHPstudy(一个套件集成软件)、sublime。
如图是PHPstudy界面,这里我只启动了Apache2.4.39服务和MySQL服务
有了以上这些准备工作,一个简单的网站就可以搭建起来,通过在网站界面内输入账号密码,将账号密码传输到MySQL数据库中,这里我代码里是用的HTTP中的POST请求上传至数据库。然后,我们就可以正式开始实验了。
打开wireshark,这里我们必须使用Npcaploopback adapter这个环回网卡,如果使用正常物理网卡,那我们从网页post到数据库中的HTTP数据包wireshark是不能捕获到的,因为此时数据包的传输不会经过物理网卡,但会经过环回网卡
因为我们知道账号密码是在HTTP数据包中进行传输的,所以筛选出HTTP包,并且我们容易的找到了带有POST请求的HTTP数据包