20199325 2019-2020-2 实践三网络嗅探与协议分析实践


目录

  • 实验三:

    • 任务一:根据教材参考代码,编写有个简单网络抓包工具,要求核心代码和运行结果截图1-2张。代码push到码云
    • 任务二找一个网站或者搭建一个本地网站,登录网站,并嗅探,分析出账号和密码,结果截图1-2张。(3分)
    • 任务三: 抓取手机App的登录过程数据包,分析账号和密码。可以用邮箱、各类博客、云班课。

实验三:

任务一:根据教材参考代码,编写有个简单网络抓包工具,要求核心代码和运行结果截图1-2张。代码push到码云

#coding:UTF-8
from scapy.all import *
import time

class PcapDecode:
    def __init__(self):
    #ETHER:读取以太网层协议配置文件
    with open(‘./protocol/ETHER‘, ‘r‘, encoding=‘UTF-8‘) as f:
            ethers = f.readlines()
        self.ETHER_DICT = dict()
        for ether in ethers:
            ether = ether.strip().strip(‘\n‘).strip(‘\r‘).strip(‘\r\n‘)
            self.ETHER_DICT[int(ether.split(‘:‘)[0])] = ether.split(‘:‘)[1]  # 将配置文件中的信息(0257:Experimental)存入dict
    # IP:读取IP层协议配置文件
    with open(‘./protocol/IP‘, ‘r‘, encoding=‘UTF-8‘) as f:
        ips = f.readlines()
    self.IP_DICT = dict()
    for ip in ips:
        ip = ip.strip().strip(‘\n‘).strip(‘\r‘).strip(‘\r\n‘)
        self.IP_DICT[int(ip.split(‘:‘)[0])] = ip.split(‘:‘)[1]  # 将配置文件中的信息(41:IPv6)存入dic

    # PORT:读取应用层协议端口配置文件
    with open(‘./protocol/PORT‘, ‘r‘, encoding=‘UTF-8‘) as f:
        ports = f.readlines()
    self.PORT_DICT = dict()
    for port in ports:
        port = port.strip().strip(‘\n‘).strip(‘\r‘).strip(‘\r\n‘)
        self.PORT_DICT[int(port.split(‘:‘)[0])] = port.split(‘:‘)[1]  # 如:21:FTP

    # TCP:读取TCP层协议配置文件
    with open(‘./protocol/TCP‘, ‘r‘, encoding=‘UTF-8‘) as f:
        tcps = f.readlines()
    self.TCP_DICT = dict()
    for tcp in tcps:
        tcp = tcp.strip().strip(‘\n‘).strip(‘\r‘).strip(‘\r\n‘)
        self.TCP_DICT[int(tcp.split(‘:‘)[0])] = tcp.split(‘:‘)[1]  # 465:SMTPS

    # UDP:读取UDP层协议配置文件
    with open(‘./protocol/UDP‘, ‘r‘, encoding=‘UTF-8‘) as f:
        udps = f.readlines()
    self.UDP_DICT = dict()
    for udp in udps:
        udp = udp.strip().strip(‘\n‘).strip(‘\r‘).strip(‘\r\n‘)
        self.UDP_DICT[int(udp.split(‘:‘)[0])] = udp.split(‘:‘)[1]  # 513:Who

# 解析以太网层协议 ---ether_decode——ip_decode(tcp_decode or udp_decode)
def ether_decode(self, p):
    data = dict()  # 解析出的信息以dict的形式保存
    if p.haslayer("Ether"):  # scapy.haslayer,将pcap包中的信息分层,再处理
        data = self.ip_decode(p)  # 解析IP层协议
        return data
    else:
        data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
        data[‘Source‘] = ‘Unknow‘
        data[‘Destination‘] = ‘Unknow‘
        data[‘Procotol‘] = ‘Unknow‘
        data[‘len‘] = len(corrupt_bytes(p))
        data[‘info‘] = p.summary()
        return data

#解析IP层协议
def ip_decode(self, p):
    data = dict()
    if p.haslayer("IP"):  #2048:Internet IP (IPv4) ,分IPV4和IPV6和其他协议
        ip = p.getlayer("IP")
        if p.haslayer("TCP"):  #6:TCP
            data = self.tcp_decode(p, ip)
            return data
        elif p.haslayer("UDP"): #17:UDP
            data = self.udp_decode(p, ip)
            return data
        else:
            if ip.proto in self.IP_DICT:  # 若ip分层中的协议信息在字典中,则提取ip分层中的源地址、目的地址、协议(转换)等
                data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
                data[‘Source‘] = ip.src
                data[‘Destination‘] = ip.dst
                data[‘Procotol‘] = self.IP_DICT[ip.proto]
                data[‘len‘] = len(corrupt_bytes(p))
                data[‘info‘] = p.summary()
                return data
            else:
                data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
                data[‘Source‘] = ip.src
                data[‘Destination‘] = ip.dst
                data[‘Procotol‘] = ‘IPv4‘
                data[‘len‘] = len(corrupt_bytes(p))
                data[‘info‘] = p.summary()
                return data
    elif p.haslayer("IPv6"):  #34525:IPv6
        ipv6 = p.getlayer("IPv6")
        if p.haslayer("TCP"):  #6:TCP
            data = self.tcp_decode(p, ipv6)
            return data
        elif p.haslayer("UDP"): #17:UDP
            data = self.udp_decode(p, ipv6)
            return data
        else:
            if ipv6.nh in self.IP_DICT:
                data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
                data[‘Source‘] = ipv6.src
                data[‘Destination‘] = ipv6.dst
                data[‘Procotol‘] = self.IP_DICT[ipv6.nh]
                data[‘len‘] = len(corrupt_bytes(p))
                data[‘info‘] = p.summary()
                return data
            else:
                data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
                data[‘Source‘] = ipv6.src
                data[‘Destination‘] = ipv6.dst
                data[‘Procotol‘] = ‘IPv6‘
                data[‘len‘] = len(corrupt_bytes(p))
                data[‘info‘] = p.summary()
                return data
    else:
        if p.type in self.ETHER_DICT:
            data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
            data[‘Source‘] = p.src
            data[‘Destination‘] = p.dst
            data[‘Procotol‘] = self.ETHER_DICT[p.type]
            data[‘len‘] = len(corrupt_bytes(p))
            data[‘info‘] = p.summary()
            return data
        else:
            data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
            data[‘Source‘] = p.src
            data[‘Destination‘] = p.dst
            data[‘Procotol‘] = hex(p.type)  # 若在字典中没有改协议,则以16进制的形式显示
            data[‘len‘] = len(corrupt_bytes(p))
            data[‘info‘] = p.summary()
            return data

#解析TCP层协议
def tcp_decode(self, p, ip):
    data = dict()
    tcp = p.getlayer("TCP")
    data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
    data[‘Source‘] = ip.src + ":" + str(ip.sport)
    data[‘Destination‘] = ip.dst + ":" + str(ip.dport)
    data[‘len‘] = len(corrupt_bytes(p))
    data[‘info‘] = p.summary()
    if tcp.dport in self.PORT_DICT:  #若端口信息在PORT_DICT\TCP_DICT中则转换为已知
        data[‘Procotol‘] = self.PORT_DICT[tcp.dport]
    elif tcp.sport in self.PORT_DICT:
        data[‘Procotol‘] = self.PORT_DICT[tcp.sport]
    elif tcp.dport in self.TCP_DICT:
        data[‘Procotol‘] = self.TCP_DICT[tcp.dport]
    elif tcp.sport in self.TCP_DICT:
        data[‘Procotol‘] = self.TCP_DICT[tcp.sport]
    else:
        data[‘Procotol‘] = "TCP"
    return data

#解析UDP层协议
def udp_decode(self, p, ip):
    data = dict()
    udp = p.getlayer("UDP")
    data[‘time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(p.time))
    data[‘Source‘] = ip.src + ":" + str(ip.sport)
    data[‘Destination‘] = ip.dst + ":" + str(ip.dport)
    data[‘len‘] = len(corrupt_bytes(p))
    data[‘info‘] = p.summary()

    #这里定义的是解析UDP协议中的五元组,分别是time,source,destination,len,info。这也是仿照wireshark进行分析的。

    if udp.dport in self.PORT_DICT:  #若端口信息在PORT_DICT\UDP_DICT中则转换为已知
        data[‘Procotol‘] = self.PORT_DICT[udp.dport]
    elif udp.sport in self.PORT_DICT:
        data[‘Procotol‘] = self.PORT_DICT[udp.sport]
    elif udp.dport in self.UDP_DICT:
        data[‘Procotol‘] = self.UDP_DICT[udp.dport]
    elif udp.sport in self.UDP_DICT:
        data[‘Procotol‘] = self.UDP_DICT[udp.sport]
    else:
        data[‘Procotol‘] = "UDP"
    return data
if __name__ == ‘__main__‘:
# pkts = sniff(iface="eth0",count=3) 简单的抓取数据包
# wrpcap("demo.pcap", pkts)  保存为demo.pcap

PD = PcapDecode()  # 实例化该类为PD
pcap_test = rdpcap("demo.pcap")  # 这个demo.pcap包含3次连接
data_result = dict()  # 将解析结果存入dict
for p in pcap_test:
    data_result = PcapDecode.ether_decode(PD, p)
    print(data_result)

我使用的Python的Scapy进行的抓包和pcap分析。这是一个很经常使用的python库。解析出来的pcap包以五元组的形式出来。

任务二找一个网站或者搭建一个本地网站,登录网站,并嗅探,分析出账号和密码,结果截图1-2张。(3分)

查看到天翼快递,目前应用的都是https协议,只有http协议的网站大部分都是明文传输。所以这个网站可以通过抓包直接找到POST方法的提交的用户和密码

任务三: 抓取手机App的登录过程数据包,分析账号和密码。可以用邮箱、各类博客、云班课。

两个网站都进行尝试,手机端好像因为浏览器的问题,没能查到POST提交的用户名和密码。时间较短,没有进行详细的查看。

原文地址:https://www.cnblogs.com/buhery/p/12590267.html

时间: 2024-07-31 15:46:46

20199325 2019-2020-2 实践三网络嗅探与协议分析实践的相关文章

实践三 网络嗅探与协议分析

目录 任务一: 任务二: 任务三: 任务一: 问题: 根据教材参考代码,编写有个简单网络抓包工具.要求核心代码和运行结果截图1-2张. 解决办法: 1.在拿到这个任务之后,我去查找如何去编写一个简单的抓包工具,发现python有一个抓包用的库scapy和解析包用到的库dpkt.于是我就打算使用python来进行编写.下面是安装这两个库的截图(由于pip版本不能更新问题导致无法导入库,将近耗费了我一整天的时间修复,头大!) 2.我将代码分为两个部分,一个是抓包文件grab packet.py和一个

PMP备考资料 | 2019/2020年PMP全真模拟题 、一模、二模、三模试题 | PMP章节练习题 | 附带详细答案解析 --- 项目整合管理 等(PMBOK®第六版)

PMP备考资料 | 2019/2020年PMP全真模拟题 .一模.二模.三模试题 | PMP章节练习题 | 附带详细答案解析 --- 项目整合管理 等(PMBOK®第六版),获取:http://t.cn/A6POWgMw 原文地址:https://www.cnblogs.com/chunlynn/p/12252179.html

20175308 实验三《敏捷开发与XP实践》

20175308 实验三<敏捷开发与XP实践> 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网络"."问同学"."看书"等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等).

六款主流免费网络嗅探软件wireshark,tcpdump,dsniff,Ettercap,NetStumbler

1.WireShark WireShark是一个开源免费的高性能网络协议分析软件,它的前身就是非常著名的网络分析软 件Ethereal.你可以使用它来解决网络疑难问题,进行网络协议分析,以及作为软件或通信协议的开发参考,同时也可以用来作为学习各种网络协议的教学 工具等等.WireShark支持现在已经出现了绝大多数的以太网网卡,以及主流的无线网卡. WireShark具有如下所示的特点: (1) 支持多种操作系统平台,可以运行于Windows.Linux.Mac OS X10.5.5.Solar

XenServer管理网络做网卡Bond最佳实践

在 XenServer 安装期间,系统会为每个物理网络接口卡 (NIC) 创建一个网络.向资源池添加服务器 时,这些默认网络会进行合并,以便设备名称相同的所有物理 NIC 均连接到同一网络. 通常情况下,如果您想要创建内部网络,使用现有 NIC 设置新 VLAN,或创建 NIC 绑定,只需添加一个新网络即可. 在 XenServer 中您可以配置四种不同类型的网络: 外部网络,与物理网络接口相关联,可在虚拟机与连接到网络的物理网络接口之间提供桥接,从而使虚拟机能够通过服务器的物理网络接口卡连接到

20135231 JAVA实验报告三:敏捷开发与XP实践

---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得0分)以及分析(从中

黑客大追踪:网络取证核心原理与实践

第一部分 基础篇 第1章 实用调查策略1.1 真实的案例1.1.1 医院里被盗的笔记本电脑1.1.2 发现公司的网络被用于传播盗版1.1.3 被黑的政府服务器 1.2 足迹1.3 电子证据的概念1.3.1 实物证据1.3.2 最佳证据1.3.3 直接证据1.3.4 情况证据1.3.5 传闻证据1.3.6 经营记录1.3.7 电子证据1.3.8 基于网络的电子证据1.4 关于网络证据相关的挑战 14 1.5 网络取证调查方法(OSCAR) 15 1.5.1 获取信息 15 1.5.2 制订方案 1

实验二 网络嗅探与欺骗

中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验二 网络嗅探与欺骗     学生姓名 ?刘家亨 年级 2014级 区队 三区队 指导教师 高见     信息技术与网络安全学院 2016年11月7日   实验任务总纲 2016-2017 学年 第 一 学期 一.实验目的 1.加深并消化本课程授课内容,复习所学过的互联网搜索技巧.方法和技术: 2.了解并熟悉常用的网络嗅探方式,掌握常用抓包软件的使用方法和过滤技巧

2017-2018-2 20165327 实验三《敏捷开发与XP实践》实验报告

2017-2018-2 20165327 实验三<敏捷开发与XP实践>实验报告 实验三 <敏捷开发与XP实践> 一.实验报告封面 课程:Java程序设计 班级:1653 姓名:杨靖涛 学号:20165327 指导教师:娄嘉鹏 实验日期:2018.4.28 实验时间:15:35 - 17:50 实验序号:三 实验名称:Java面向对象程序设计 实验内容: XP基础 XP核心实践 相关工具 实验要求: 没有Linux基础的同学建议先学习<Linux基础入门(新版)><