关于Linux实验报告 第一话

一、实验一:Linux虚拟网络环境和Wireshark抓包软件

目的:熟悉使用Vamware和Linux操作系统的基本操作等。

在进行实验前我们首先需要安装Vamware和Centos镜像来构造虚拟环境,此文章默认已经安装配置好虚拟环境。

1.首先我们进入虚拟环境后打开我们的终端命令行窗口对我们接下来的操作进行授权:在命令行首行输入su,后会弹出password,然后输入密码打开权限。

2.接下来我们要通过WireShark来进行我们的抓包操作,抓包之前需要先配置网络命名空间,创建一对网络接口再对其配置地址等,这里就不再赘述。

3.我们在其中一个空间(这里我命名为ns1)后台启动WireShark,在命令行中输入:ip netns exec ns1 wireshark &,然后测试两个网络空间(这里我命名为ns1和ns2)的连通性,输入命令行:ip netns exec ns1 ping -c 2 192.168.50.2,回车。

4.测试连通性后我们就可以在wireshark中看到我们的连通性信息,比如RTT、捕获的数据帧数量、各个层的网络协议等信息。

总结:通过此实验可以对Vamware和Linux操作系统的基本操作有了初步的了解,为接下来的学习做了铺垫。

二、实验二:HTTP协议的探索和分析

目的:熟悉HTTP协议的请求和响应格式,掌握分析HTTP协议数据流的方法。

1.我们依旧是先对操作进行授权(输入su命令),然后运行Wireshark,然后在虚拟机中打开FireFox浏览器输入网址(本文网址为www.zzu.edu.cn)选择ens33接口开始抓包。

2.可以在wireshark中看到有许多的报文:

我们这里要研究的是HTTP协议所以我们选择随机一个HTTP报文,点击analyze后再点击Follow TCP Stream子菜单跟踪TCP流,选择其中任意一对HTTP请求和响应,分析其请求和响应的格式。

从我的结果可以看出所运用的请求方法是GET,URL是/success.txt,版本是HTTP/1.1,最后一项的是否采取持续连接中是keep-alive,这表明是持续连接,然后下面的蓝色部分是网站的信息....

总结:在此次实验中浏览器与web服务器之间建立了23条TCP连接,这样做的原因是为了解除HTTP的线程阻塞问题,使用多线程的方式 访问同一个网站上的资源,可以加快响应的速度。

三、实验三:UDP协议的探索和分析

目的:掌握UDP协议数据格式、首部各字段含义、了解网卡offload技术、熟悉Linux下nc命令的使用方法。

1.(root)通过使用脚本来创建目标网络的拓扑结构,导入脚本script3.1(由于不能直接上传脚本,只能粘贴代码了😀)

#!/bin/sh
#本脚本创建虚拟网络拓扑,并为各接口配置IP地址,但未进行路由配置。
set -x

#开启ip分组转发
sysctl -w net.ipv4.ip_forward=1
#为更好的模拟路由器工作,需关闭Linux防火墙,避免路由器进行IP分片重组
systemctl stop firewalld.service
#关闭Linux反向路径校验
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
#iptables服务,进行TCP相关实验时需要开启,进行ICMP目的不可达实验时也需要开启
systemctl start iptables.service
#启用linux内核的ICMP重定向响应,进行ICMP重定向实验时需要开启
sysctl -w net.ipv4.conf.all.accept_redirects=1

#创建br56A及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br56A
#创建namespace
ip netns add ns56A
#将lo接口上线
ip netns exec ns56A ip link set lo up
#创建veth pair
ip link add tap56A type veth peer name tap56A_p
#把tap迁移到namespace
ip link set tap56A netns ns56A
#把相应tap添加到Bridge中
brctl addif br56A tap56A_p
#配置IP地址
ip netns exec ns56A ip addr add local 192.168.56.126/25 dev tap56A
#将Bridge及相关tap状态设置为up
ip link set br56A up
ip link set tap56A_p up
ip netns exec ns56A ip link set tap56A up
#配置默认路由
ip netns exec ns56A route add default gw 192.168.56.1

#创建br57A及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br57A
#创建namespace
ip netns add ns57A
#将lo接口上线
ip netns exec ns57A ip link set lo up
#创建veth pair
ip link add tap57A type veth peer name tap57A_p
#把tap迁移到namespace
ip link set tap57A netns ns57A
#把相应tap添加到Bridge中
brctl addif br57A tap57A_p
#配置IP地址
ip netns exec ns57A ip addr add local 192.168.57.126/25 dev tap57A
#将Bridge及相关tap状态设置为up
ip link set br57A up
ip link set tap57A_p up
ip netns exec ns57A ip link set tap57A up
#配置默认路由
ip netns exec ns57A route add default gw 192.168.57.1
#为主机57A配置到192.168.57.128/26的路由(进行ICMP重定向实验时删除,以产生ICMP重定向报文)
ip netns exec ns57A route add -net 192.168.57.128/26 gw 192.168.57.125

#创建br57B及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br57B
#创建namespace
ip netns add ns57B
#将lo接口上线
ip netns exec ns57B ip link set lo up
#创建veth pair
ip link add tap57B type veth peer name tap57B_p
#把tap迁移到namespace
ip link set tap57B netns ns57B
#把相应tap添加到Bridge中
brctl addif br57B tap57B_p
#配置IP地址
ip netns exec ns57B ip addr add local 192.168.57.190/26 dev tap57B
#将Bridge及相关tap状态设置为up
ip link set br57B up
ip link set tap57B_p up
ip netns exec ns57B ip link set tap57B up
#配置默认路由
ip netns exec ns57B route add default gw 192.168.57.129

#创建br57C及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br57C
#创建namespace
ip netns add ns57C
#将lo接口上线
ip netns exec ns57C ip link set lo up
#创建veth pair
ip link add tap57C type veth peer name tap57C_p
#把tap迁移到namespace
ip link set tap57C netns ns57C
#把相应tap添加到Bridge中
brctl addif br57C tap57C_p
#配置IP地址
ip netns exec ns57C ip addr add local 192.168.57.254/26 dev tap57C
#将Bridge及相关tap状态设置为up
ip link set br57C up
ip link set tap57C_p up
ip netns exec ns57C ip link set tap57C up
#配置默认路由
ip netns exec ns57C route add default gw 192.168.57.193
#为主机57C配置到192.168.57.0/24的路由(可以不配置,会产生ICMP重定向报文)
ip netns exec ns57C route add -net 192.168.57.0/24 gw 192.168.57.253

#创建各路由器NS
ip netns add RA
ip netns add RB
ip netns add RC
ip netns add RD
ip netns add RE
#各路由器lo接口上线
ip netns exec RA ip link set lo up
ip netns exec RB ip link set lo up
ip netns exec RC ip link set lo up
ip netns exec RD ip link set lo up
ip netns exec RE ip link set lo up

#连接路由器RC和网桥br57A
#创建veth pair
ip link add tapRC_57A type veth peer name tap57A_RC
#把tap迁移到路由器和网桥
ip link set tapRC_57A netns RC
brctl addif br57A tap57A_RC
#配置相应tap的IP地址
ip netns exec RC ip addr add local 192.168.57.1/25 dev tapRC_57A
#将相关tap状态设置为up
ip netns exec RC ip link set tapRC_57A up
ip link set tap57A_RC up

#连接路由器RE和网桥br57A
#创建veth pair
ip link add tapRE_57A type veth peer name tap57A_RE
#把tap迁移到路由器和网桥
ip link set tapRE_57A netns RE
brctl addif br57A tap57A_RE
#配置相应tap的IP地址
ip netns exec RE ip addr add local 192.168.57.125/25 dev tapRE_57A
#将相关tap状态设置为up
ip netns exec RE ip link set tapRE_57A up
ip link set tap57A_RE up

#连接路由器RE和网桥br57B
#创建veth pair
ip link add tapRE_57B type veth peer name tap57B_RE
#把tap迁移到路由器和网桥
ip link set tapRE_57B netns RE
brctl addif br57B tap57B_RE
#配置相应tap的IP地址
ip netns exec RE ip addr add local 192.168.57.129/26 dev tapRE_57B
#将相关tap状态设置为up
ip netns exec RE ip link set tapRE_57B up
ip link set tap57B_RE up

#连接路由器RE和网桥br57C
#创建veth pair
ip link add tapRE_57C type veth peer name tap57C_RE
#把tap迁移到路由器和网桥
ip link set tapRE_57C netns RE
brctl addif br57C tap57C_RE
#配置相应tap的IP地址
ip netns exec RE ip addr add local 192.168.57.253/26 dev tapRE_57C
#将相关tap状态设置为up
ip netns exec RE ip link set tapRE_57C up
ip link set tap57C_RE up

#连接路由器RD和网桥br57C
#创建veth pair
ip link add tapRD_57C type veth peer name tap57C_RD
#把tap迁移到路由器和网桥
ip link set tapRD_57C netns RD
brctl addif br57C tap57C_RD
#配置相应tap的IP地址
ip netns exec RD ip addr add local 192.168.57.193/26 dev tapRD_57C
#将相关tap状态设置为up
ip netns exec RD ip link set tapRD_57C up
ip link set tap57C_RD up

#连接路由器RB和网桥br56A
#创建veth pair
ip link add tapRB_56A type veth peer name tap56A_RB
#把tap迁移到路由器和网桥
ip link set tapRB_56A netns RB
brctl addif br56A tap56A_RB
#配置相应tap的IP地址
ip netns exec RB ip addr add local 192.168.56.1/25 dev tapRB_56A
#将相关tap状态设置为up
ip netns exec RB ip link set tapRB_56A up
ip link set tap56A_RB up

#连接路由器RA和路由器RB
#创建veth pair
ip link add tapRA_RB type veth peer name tapRB_RA
#把tap迁移到路由器
ip link set tapRA_RB netns RA
ip link set tapRB_RA netns RB
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.56.246/30 dev tapRA_RB
ip netns exec RB ip addr add local 192.168.56.245/30 dev tapRB_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RB up
ip netns exec RB ip link set tapRB_RA up

#连接路由器RA和路由器RC
#创建veth pair
ip link add tapRA_RC type veth peer name tapRC_RA
#把tap迁移到路由器
ip link set tapRA_RC netns RA
ip link set tapRC_RA netns RC
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.56.249/30 dev tapRA_RC
ip netns exec RC ip addr add local 192.168.56.250/30 dev tapRC_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RC up
ip netns exec RC ip link set tapRC_RA up

#连接路由器RA和路由器RD
#创建veth pair
ip link add tapRA_RD type veth peer name tapRD_RA
#把tap迁移到路由器
ip link set tapRA_RD netns RA
ip link set tapRD_RA netns RD
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.56.253/30 dev tapRA_RD
ip netns exec RD ip addr add local 192.168.56.254/30 dev tapRD_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RD up
ip netns exec RD ip link set tapRD_RA up

#连接路由器RA和Linux Host
#创建veth pair
ip link add tapRA_H type veth peer name tapH_RA
#把tap迁移到路由器
ip link set tapRA_H netns RA
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.99.100/24 dev tapRA_H
ip addr add local 192.168.99.1/24 dev tapH_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_H up
ip link set tapH_RA up
#为Linux Host配置到虚拟实验网络的路由
route add -net 192.168.56.0/23 gw 192.168.99.100

#END

2.建立NS列表,使用ifconfig -a查看NS内的网络接口配置,查看交接机桥接状态

3.依次使用脚本script3.2配置静态路由,script3.3关闭网卡offload功能,脚本代码如下

script3.2

#!/bin/sh
#本脚本为虚拟网络拓扑进行静态路由配置。
set -x

#各路由器的直连路由,已经在script3.1中设置IP地址时自动生成了,无需手动配置
#RA路由(最长前缀匹配)
ip netns exec RA route add -net 192.168.57.0/24 gw 192.168.56.250
ip netns exec RA route add -net 192.168.57.192/26 gw 192.168.56.254
ip netns exec RA route add -net 192.168.56.0/25 gw 192.168.56.245
#默认路由,(进行ICMP目的不可达实验时删除,以产生网络不可达 #ICMP3-0)
ip netns exec RA route add default gw 192.168.99.1
#RB路由
ip netns exec RB route add default gw 192.168.56.246
#RC路由
ip netns exec RC route add -net 192.168.57.128/25 gw 192.168.57.125
ip netns exec RC route add default gw 192.168.56.249
#RD路由(最长前缀匹配)
ip netns exec RD route add -net 192.168.57.0/24 gw 192.168.57.253
ip netns exec RD route add default gw 192.168.56.253
#RE路由
ip netns exec RE route add default gw 192.168.57.1

#end

script3.3

#!/bin/sh
#本脚本关闭网卡offload功能。
set -x

#关闭各主机网卡GSO功能,网卡不再替CPU进行TCP\UDP分片
ip netns exec ns56A ethtool -K tap56A gso off
ip netns exec ns57A ethtool -K tap57A gso off
ip netns exec ns57B ethtool -K tap57B gso off
ip netns exec ns57C ethtool -K tap57C gso off
#关闭各主机网卡的校验和计算功能,网卡不再替CPU进行TCP\UDP校验和计算
ip netns exec ns56A ethtool -K tap56A tx off rx off
ip netns exec ns57A ethtool -K tap57A tx off rx off
ip netns exec ns57B ethtool -K tap57B tx off rx off
ip netns exec ns57C ethtool -K tap57C tx off rx off

#END

4.再打开两个终端窗口,分别模拟为主机ns56A和ns57c的终端

5.接下来我们抓包,启动wireshark,在ns57c终端4499端口打开UPD客户程序

6.在主机ns56A中执行如下命令以指定UPD服务程序的IP地址和端口

OK,我们接下来就可以在ns56A中输入我们要发送的信息 ,再在ns57c中进行回应

如图我回复了一个yes,之后我们就转到wireshark中看看这次的交互是怎么个事儿。

7.我们先暂停此次抓包保存结果文件,就会得到这样一个页面

OK,我们对这次结果进行分析:我们点击第一个协议名为ICMP的报文,在其下方窗口处可以看到我们所发送的信息

其实到这里我们就已经有点明白了,这些报文中只有两个为ICMP报文,分别就代表了我们所设置的发送和接收方,点开这些报文所附带的行就能看到其具体信息,比如

这个就表示我们的源端口是4499,也就是我们上面所设置的,目标端口就是56642,长度为12等等,而我们此次实验所要分析学习的UDP,UDP数据报的首部和尾部就是前后ICMP报文中的信息....

总结:通过本次实验了解到UDP的协议数据格式以及它的报文各字段(与ICMP类似)的含义,以及脚本的功能等等。

四、实验四:TCP协议探索和连接管理分析

目的:掌握TCP协议数据格式以及各字段的含义、建立连接和释放连接的过程

1.利用script3.1、script3.2、script3.3创建虚拟网络拓扑,分别模拟两个主机(ns56A、ns57c),在其中一个上创建3500字节长度的文件备用,开始抓包,后读取文件3500.0。

前三行报文代表发送端与接收端的三次握手,后面的带有FIN字段的代表完成,通过查看报文信息,此次双方都使用了MSS选项,ns57c将3500字节数据发送给ns56A用了3个报文段,有效最大长度为3500。连接和释放的报文段分别为3个和2个。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值