禁 止 吃 瓜

我是小鱼

刚才有个同学问我小鱼发生肾么事了

我说怎么回事?

给我发了一个张截图,我一看!

噢!原来是昨天发布第二次寒假作业了

我大一了啊没有闪

来!偷袭!我三岁的小同志

当时就流眼泪了

(编不下去了)

任务

  • 读取流量数据文件(完成)
  • 总数量、总包长随每 10K 流量读取处理完毕,变化的折线图(未完成!!!有思路晚上琢磨琢磨看能不能整出来
  • 设定阈值 φ 和 Φ
    • 单周期内访问次数(即数据包数)超过某一阈值 Φ
    • 单周期内数据包累积值(即数据包长累积值)超过某一阈值 φ
  • 检测出的异常流的 list (完成,通过输出图表和列表)

实现方法

python

正文

时间评估

和第一次作业一样,依然是什么都不会

大方向是python先学到数组和字典,然后学Matplotlib用来绘图

但是奆佬说Matplotlib太粗陋,所以有能力的话学web(fine现在看来没有)

Python肝两天看看能不能搞完,web没有接触过时间不好估计

本来以为寒假开始就买python书吃灰的我在第一层,没想到这波在大气层

学习的编程语言

Python

过程

准备工作

python学习笔记

安装Scapy

                     aSPY//YASa
apyyyyCY//////////YCa |
sY//////YSpcs scpCY//Pp | Welcome to Scapy
ayp ayyyyyyySCP//Pp syY//C | Version 2.4.4
AYAsAYYYYYYYY///Ps cY//S |
pCCCCY//p cSSps y//Y | https://github.com/secdev/scapy
SPPPP///a pP///AC//Y |
A//A cyP////C | Have fun!
p///Ac sC///a |
P////YCpc A//A | Craft packets like it is your last
scccccp///pSP///p p//Y | day on earth.
sY/////////y caa S//P | -- Lao-Tze
cayCyayP//Ya pY/Ya |
sY/PsY////YCc aC//Yp
sc sccaCY//PCypaapyCP//YSs
spCPY//////YPSps
ccaacs

过程坎坷.jpg

我以为从头开始学python是最难的部分,没想到scapy是最难的部分,没有找到很系统的教程,CSDN上写的看了也非常头疼,总之就是非常绝望。

先贴参考资料:

scapy中文使用文档

用scapy分层解析pcap报文

Matplotlib如何绘制多个子图

还有一些看完就关了,有点不全

程序

使用tcpdump抓包

sudo tcpdump -c 数量 -w 文件名
  • 运行后可以在文件中找到抓取的pcap格式的数据

  • 读取pcap格式数据可以用wireshark(与主线无关)

处理数据

giao我后来才知道可以用sniff抓包,但是既然抓都抓了将错就错fine

直接上代码

from scapy.all import *
if __name__ == '__main__':
limit_num = input("Enter the limit of quantity:")
limit_num = int(limit_num)#获取数据包数的阈值
limit_len = input("Enter the limit of lenth:")
limit_len = int(limit_len)#获取数据包长累计值的阈值
pkts_file = rdpcap('test')#读pcap文件
pkt_list = pkts_file.res#提取每个包到清单pkt_list dos_result_num = {}
dos_result_len = {} #####################处理数据##################### for packet in pkt_list:
try:
if packet.getlayer(TCP).fields['flags']==2:
#这个我也迷惑,好像flag等于2就可以判定进行了一次访问(SYN包那边的知识)
destination_ip = packet.getlayer(IP).fields['dst']#提取目的地址
conn = destination_ip
conn_counts = dos_result_num.get(conn,0)#判断是否有这个键值,没有就返回0
dos_result_num[conn] = conn_counts + 1#在返回值的基础上加1
except Exception:
pass for packet in pkt_list:#和统计次数的操作大同小异
try:
if packet.getlayer(TCP).fields['flags']==2:
destination_ip = packet.getlayer(IP).fields['dst']
lenth = packet.getlayer(IP).fields['len']
conn = destination_ip
conn_lenth = dos_result_len.get(conn,0)
dos_result_len[conn] = conn_lenth + lenth
except Exception:
pass from matplotlib import pyplot as plt conn_len_list = sorted([[conn,lenth] for conn,lenth in dos_result_len.items() if lenth > limit_len],key = lambda x:x[1])
#提取长度大于设定包长阈值的连接,并且从大到小排序
conn_num_list = sorted([[conn,num] for conn,num in dos_result_num.items() if num > limit_num],key = lambda x:x[1])
#提取数量大于设定包数阈值的连接,并且从大到小排序 conn_list_1 = []
conn_list_2 = []
lenth_list = []
num_list = [] #处理需要的数据,为绘图做准备 for c,l in conn_len_list:
conn_list_1.append(str(c))
lenth_list.append(l)
for c,n in conn_num_list:
conn_list_2.append(str(c))
num_list.append(n) #######################绘图####################### print("abnormal_list_quantity")
for abn in conn_list_1:
print(abn)
print("\nabnormal_list_lenth")
for abn in conn_list_2:
print(abn)
plt.subplot(211)#子图位置第一行第一列
plt.barh(conn_list_1, lenth_list, height=0.5)
plt.title('Dos analysis')
plt.xlabel('Lenth')
plt.ylabel('Connect') plt.subplot(212)#子图位置第二行第一列
plt.barh(conn_list_2, num_list, height=0.5)
plt.xlabel('Quantity')
plt.ylabel('Connect') plt.show()

运行结果

如果包长阈值太小就会密密麻麻

对包长和包数的统计是独立的,我左边的列表输出应该整个并集来着(马后炮)

总结

Github链接

Click Here

实际用时

  • 一开始python基础内容的学习基本跟上计划(计划两天实际两天半)
  • 后面学scapy就很有抵触情绪,因为实在做不出来挫败感爆棚,一拖再拖,几乎没什么进展
  • 最后硬着头皮上整出了这些,有一些功能也没有实现害 (一开始的雄心壮志是做出骨灰级)

遇到的困难

一语成谶

遇到的困难是相当多

  • 安装scapy、matplotlib啥的也不是一帆风顺,本来想在window上做,但是装scapy一直满屏飘红报错(虽然后来装好了),遂放弃,用Linux做。装matplotlib也蛮坎坷的

  • 主要是scapy没有找到很系统的教学 有也看不懂 ,在CSDN上看到的又是只言片语一笔带过

绝望.jpg

这次作业只运用了scapy的冰山一角,但是从头学scapy不现实,就单独的问题去找博客获取的信息又太少,有效获取信息的能力很欠缺

替老板思考

  • 这些懒懒的技术人员制定的判定规则会出现的问题有哪些?

    如果阈值太低的话(比如上面设置包长100)可能会出现误杀的情况

  • 如果你是竞争对手,能否找到其他进攻方式绕开该规则,或者通过其他网络手段有效打击对手?

    ​可以更改自己的地址,过一会儿换一个,把自己隐藏在正常访问的用户中

  • 评估自己的系统的处理效率

    ​运行二十多秒才能出结果,效率极高

  • 老板某日在想桃子:我xxx有一个梦想,建成世界一流 news app!能够为世界上每个网民提供吃瓜服务。请从多个方向考虑该系统需要改进的地方还有哪些?(数据量,效率,安全性等等)

    需要改进我自己

不过也蛮骄傲的这次作业几乎完全独立完成,没靠过谁

因为大佬在大气层我在地板他们说的我都听不懂

Homework_2的更多相关文章

  1. C语言递归函数讲解

    递归函数是什么? 是函数.................... 你可以把它理解成是for循环与死循环的结合的函数.简单的说:递归函数是有条件终止的死循环函数: 死循环函数这里是指在函数体中调用自身: ...

  2. 结对作业——随机生成四则运算(Core 第7组)

    结对作业 ——随机生成四则运算(core第7组) 吕佳玲 PB16060145 涂涵越 PB16060282 GITHUB地址 https://github.com/hytu99/homework_2 ...

  3. java基础之完数判断

    完数: 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该 ...

  4. Linux 常见文件管理命令

    Linux文件系统 根目录:/ 从根目录开始,下面有一堆小目录 root:根用户的目录 bin:可执行文件命令 etc:配置文件 var:日志 lib:安装包或头文件,库文件 home:所有用户的家目 ...

  5. 工程课Linux第一节笔记

    上课笔记 文件系统结构 /根目录 /bin/ 存放系统命令,普通用户与root都可以执行 /etc/ 配置文件保存位置 /lib/ 系统调用的函数库保存位置 /var/ 目录用于存储动态数据,例如缓存 ...

随机推荐

  1. Spring事务的基本原理

    Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.. 对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connecti ...

  2. Trial-faster-rcnn

    目录 motivation 实验设置 实验结果 motivation 试一下faster rcnn的代码, 主要想看看backbone训练一部分好呢还是全部都训练好呢? 实验设置 Attribute ...

  3. Spring Boot 2 中如何使用 Log4j2 记录日志

    上一篇我们介绍了Spring Boot 2.x中默认日志框架Logback的使用.今天继续说说日志,接下来我们要讲是前段时间爆出核弹漏洞的Log4j2.虽然出了漏洞,让很多小伙伴痛苦了1-2周(加班) ...

  4. Vue.js高效前端开发 • 【Ant Design of Vue框架基础】

    全部章节 >>>> 文章目录 一.Ant Design of Vue框架 1.Ant Design介绍 2.Ant Design of Vue安装 3.Ant Design o ...

  5. 【计项02组01号】Java版图形界面计算器

    Java版图形界面计算器1.0版本 项目分析[1.0] 组成部分 代码结构 (1)窗口的创建 在<JDK 核心 API>中我们提到,创建一个窗口需要使用 JFrame 类.在本实验中,我们 ...

  6. linux(CentOS7) 之 克隆虚拟机并配置网络(固定ip)

    克隆机器 原机关机状态下,克隆. 下一步 选择当前状态,下一步 选择创建完整克隆,下一步 设置虚拟机名称(完成后可以修改).克隆机安装位置,下一步 等待克隆完成 克隆完成 配置网络 添加网卡(因为物理 ...

  7. Zabbix监控报警Lack of free swap space on Zabbix server解决办法

    故障描述: Lack of free swap space on Zabbix server 故障原因: 情况一:云主机:因为Zabbix监控没有考虑虚拟主机的swap分区情况. 情况二:物理主机:说 ...

  8. C语言 运算符优先级和结合方向

    运算符优先级和结合方向 初级运算符( ).[ ].->..  高于  单目运算符  高于  算数运算符(先乘除后加减)  高于  关系运算符  高于  逻辑运算符(不包括!)  高于  条件运算 ...

  9. 软件开发架构与网络之OSI七层协议(五层)

    本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...

  10. js中数字和字母互转的方法

    var letter = String.fromCharCode(66); // B var num = "B".charCodeAt(); // 66