记一次计算机学习-sdn实验室进入考核作业

自我介绍


姓名:胡智凯
学号:212006240
班级:计算机科学与技术3班
杂谈:在高考后迷茫的我迷迷糊糊的选择了计算机科学与技术这个专业,在这之前,我与计算机并无多大交集,无非是玩玩游戏,看看视频,聊聊天罢了,直到进入大学生活,第一次的python课,第一次的计算机导论,我才得以窥得计算机真正的含义,是无限的可能性和未来。在日常生活里我喜欢做些手工,学习上我喜欢新鲜的知识,正如我这次试图加入SDN实验室一样,我不了解这里是做什么的,我对计算机一无所知,对发布的任务一窍不通,甚至在截止前2天我才刚刚拿到我的电脑开始研究,希望这次勇敢的决定不会无果而终,希望我可以在过程中,在未来学到更多的知识,找到自己研究目标与方向。

Github与GitHub仓库


本次作业链接
我的GitHub
我的GitHub仓库

虚拟机 + ubuntu的安装


这里我直接使用了学校电脑同款的VMware进行安装。

相关组件的安装

tcpdump抓包与数据清洗


tcpdump抓包-1。

tcpdump抓包-2。

我的收获


1、学到了虚拟机及虚拟机系统的安装
2、一些组件的安装,tcpdump的简单使用
3、wireshark的简单操作。
4、python的简单编写。
5、提升了找资料分析资料的能力。
参考资料
Markdown的学习

wireshark入门

类似问题的解答

WSL2

Wireshark数据抓包教程之认识捕获分析数据包

python可以用来做什么

wireshark的使用和数据包分析方法

python写抓包工具

python分析网络流量

方法/思路


通过吞吐量图可以看出每秒平均接收量,以及段长度。


I/O graphs可以看出每秒数据包接收数量,设定一个阈值超过则为高频率。

代码

1、wireshark:"tcp.len>=K"
“frame.time_delta<k”如果两个包接收时间小于k秒,则标记
2、python
import dpkt
import socket

  def FindPcapWord(pcap,WordKey):
      for timestamp,packet in pcap:
          try:
              eth = dpkt.ethernet.Ethernet(packet)
              ip = eth.data
              src = socket.inet_ntoa(ip.src)
              dst = socket.inet_ntoa(ip.dst)
              tcp = ip.data
              http = dpkt.http.Request(tcp.data)
              if(http.method == "GET"):
                  uri = http.uri.lower()
                  if WordKey in uri:
                      print("[+] 源地址: {} --> 目标地址: {} 检索到URL中存在 {}".format(src,dst,uri))
          except Exception:
              pass

  def FindHivemind(pcap):
      for timestamp,packet in pcap:
          try:
              eth = dpkt.ethernet.Ethernet(packet)
              ip = eth.data
              tcp = ip.data
              src = socket.inet_ntoa(ip.src)
              dst = socket.inet_ntoa(ip.dst)
              sport = tcp.sport
              dport = tcp.dport
              # print("[+] 源地址: {}:{} --> 目标地址:{}:{}".format(src,sport,dst,dport))
              if dport == 80 and dst == "125.39.247.226":
                  # 如果数据流中存在cmd等明文命令则说明可能存在后门
                  if '[cmd]# ' in tcp.data.lower():
                      print("[+] {}:{}".format(dst,dport))
          except Exception:
              pass

  def FindDDosAttack(pcap):
      pktCount = {}
      for timestamp,packet in pcap:
          try:
              eth = dpkt.ethernet.Ethernet(packet)
              ip = eth.data
              tcp = ip.data
              src = socket.inet_ntoa(ip.src)
              dst = socket.inet_ntoa(ip.dst)
              sport = tcp.sport
              # 累计判断各个src地址对目标地址80端口访问次数
              if dport == 80:
                  stream = src + ":" + dst
                  if pktCount.has_key(stream):
                      pktCount[stream] = pktCount[stream] + 1
                  else:
                      pktCount[stream] = 1
          except Exception:
              pass
      for stream in pktCount:
          pktSent = pktCount[stream]
          # 如果超过设置的检测阈值500,则判断为DDOS攻击行为
          if pktSent > 500:
              src = stream.split(":")[0]
              dst = stream.split(":")[1]
              print("[+] 源地址: {} 攻击: {} 流量: {} pkts.".format(src,dst,str(pktSent)))


  if __name__ == "__main__":
      fp = open("F://1.pcap","rb")
      pcap = dpkt.pcap.Reader(fp)
      FindPcapWord(pcap,"wang.zip")

复制粘贴来的完全看不懂但应该可以用,没有时间去实践学习了,希望能在作业后弥补遗憾。

实现效果

wireshark

frame.time_delta<0.00001

困难问题与解决方法

在一开始安装虚拟机时,弹出了AMD-V未开启的错误提示,通过进入BIOS后进行设置解决
随之而来的问题是相关组件安装,在资料以及黄中天同学的帮助下完成
wireshark的认识和使用通过b站视频以及黄中天同学的帮助下明白基本操作
Markdown大概是最简单的一个问题,轻松通过b站视频解决
在后面我提出能否使用python来进行数据清洗,在这个过程中最麻烦的问题是pandas库的安装以及代码的学习以及越发紧张的时间
这次学习过程中最大的问题来自于对问题的茫然,在一无所知的前提下去学习解决问题的方案。

总结

在这次学习中遇到了很多的困难也接触到并且学到了很多计算机相关的知识,对于我来说最重要的大概就是极大增长了对计算机世界的见识以及寻找知识、自我学习的能力,在仅有2天的时间内完成对任务的了解和解答实在压力山大,但带来的收获已经足以令我感到兴奋,在这次挑战之后,我相信自己也可以在之后的计算机学习中保持热情与主动,努力攻克更多的难题。
python代码在最后的2小时找到,但已没有时间研究。
wireshark的分析相关方法在最后1小时找到同样没有时间研究分析。

本次作业实属遗憾,相见恨晚,操劳两天一夜只能做到这种程度,但后悔已经来不及,下次加油。

posted @ 2020-11-04 23:41  翛然0410  阅读(158)  评论(1编辑  收藏  举报