(第七周作业)
1、 100.0.0.16/28 对应网段的网关地址、广播地址、可分配IP地址范围
已知IP地址为100.0.0.16/28,最后的28表示前28位为网络位,IP地址有32位,所以后4位为主机位,把IP地址最后一段展开后得到100.0.0.0001 0000其中最后4位为主机位(加粗显示)
(1)默认网关地址是主机位除最后一位全置1后得到的,所以默认的网关地址为:100.0.0.0001 1110(主机位加粗显示),换算成十进制就是100.0.0.30/28
(2)默认广播地址就是主机位全为1后得到的,所以默认广播地址为:100.0.0.0001 1111(主机位加粗显示),换算成十进制就是100.0.0.31/28
(3)可分配IP地址范围,就是求该网段内有有效地址空间,有效地址空间就是去掉主机位全为0和主机位全为1的地址,因为:在一个网络段中主机号全为0 代表这个网络段本身 称之为:网络号 。主机位全为1表示是广播地址,即是向这个网络中所有主机发送广播的地址。这两个地址是不可以分配给主机的。所以有效地址空间的IP范围为100.0.0.0001 0001---100.0.0.0001 1110(主机位加粗显示)换算成十进制就是100.0.0.17/28---100.0.0.30/28,共14个有效IP地址。
2、 使用man手册学习tcpdump的使用
使用whatis tcpdump查看对应man手册有几本
tcpdump (8) - dump traffic on a network
发现只有一本,所以直接用 $man tcpdump查看
tcpdump采用命令行方式对网络接口的数据包进行筛选抓取
语法如下:
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q|-P in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
描述:
tcpdump在网络接口(interface)上打印出与布尔表达式匹配的数据包内容的描述; 描述之前是一个时间戳,默认情况下打印为小时,分钟,秒和0:00:00以来的秒数。 使用-w标志,它将数据包数据保存到文件中以供以后分析,使用-r标志,它将从保存的数据包文件中读取而不是读取数据包来自网络接口。 使用-V标志运行,它将读取已保存的数据包文件列表。 在所有情况下,只有匹配表达式的数据包才会被tcpdump处理。使用-c标志,它将处理指定数量的数据包后退出,否则它将持续捕获数据包,直到被SIGINT信号(例如,通过键入中断字符,通常是control-C)或SIGTERM信号(通常使用kill产生)。
当tcpdump完成捕获数据包时,它将报告以下计数:
数据包"capture''(这是tcpdump接收和处理的数据包数);
数据包“由过滤器接收”(其含义取决于运行tcpdump的操作系统,可能与操作系统配置的方式有关 - 如果在命令行上指定了过滤器,则在某些操作系统上,无论它们是否与过滤器表达式匹配,无论tcpdump是否已读取并处理它们,所有的数据包都被计数;在某些操作系统上它只计算与过滤器表达式匹配的数据包,而不管tcpdump是否已经读取并处理它们。又在某些操作系统上,它只计算与过滤器表达式匹配并由tcpdump处理的数据包);
数据包“被内核丢弃”(这是由于缺少缓冲区空间而被丢弃的数据包数量,由运行tcpdump的操作系统中的数据包捕获机制决定,如果操作系统没有向应用程序报告该信息,则为0)。
在支持SIGINFO信号的平台上,例如大多数BSD(包括Mac OS X)和Digital / Tru64 UNIX,它会在收到SIGINFO信号时报告这些计数(例如,通过输入“status”字符生成 ,通常是control-T,虽然在某些平台上,例如Mac OS X,默认情况下不设置“status”字符,因此必须使用stty设置才能使用它并继续捕获数据包。 在不支持SIGINFO信号的平台上,使用SIGUSR1信号可以实现相同的功能。
从网络接口读取数据包可能要求您具有特殊权限; 有关详细信息,请参见pcap(3PCAP)手册页。 读取已保存的数据包文件不需要特殊权限。
选项:
-A 以ASCII格式打印每个数据包(去除其链接级别标题)。 方便捕获网页。
-b 以ASDOT表示法而不是ASPLAIN表示法打印BGP数据包中的AS编号。
-B buffer_size 或--buffer-size=buffer_size 将操作系统捕获缓冲区大小设置为buffer_size,以KiB(1024字节)为单位。
-c 计数 收到计数包后退出。
-C file_size 在将原始数据包写入保存文件之前,请检查该文件当前是否大于file_size,如果是,请关闭当前保存文件并打开一个新文件。 第一个savefile之后的savefiles将使用-w标志指定名称,后面有一个数字,从1开始并继续向上。 file_size的单位是数百万字节(1,000,000字节,而不是1,048,576字节)。
-d 将编译后的数据包匹配代码以人类可读的形式dump到标准输出并停止。
-dd 将数据包匹配代码转储为C程序片段。
-ddd将数据包匹配代码转储为十进制数字(以计数开头)。
-D 或 --list-interfaces 打印系统上可用的网络接口列表以及tcpdump可以捕获数据包的列表。 对于每个网络接口,将打印数字和接口名称,可能后跟接口的文本描述。 可以将接口名称或编号提供给-i标志以指定要捕获的接口。
-e 在每个dump行上打印链接级标题。例如,这可以用于打印诸如以太网和IEEE 802.11之类的协议的MAC层地址。
-E 用来解密加密过的IPv4 ESP数据包(注:本文不展开,请自看man帮助)
-f 打印`外部'IPv4地址以数字方式而不是符号方式(此选项当该接口的地址或网络掩码不可用时无效)
-F file 使用file作为过滤器expression的输入。命令行上给出的expression将被忽略。
-G rotate_seconds 每隔rotate_seconds秒进行一次dump文件的轮换,使用-w选项指定的转储文件名,文件名应包含strftime定义的时间格式,否则每个新文件都将覆盖前一个,如果与-C选项一起使用,则文件名采用“file#"的形式,如file1 file2....。
-h 或 --help 打印tcpdump和libpcap版本字符串,打印用法消息,然后退出。
--version 打印tcpdump和libpcap版本字符串并退出。
-H 尝试检测802.11s 定义的网格标头。
-i interface 或--interface=interface 监听的接口,如果未指定,tcpdump将在系统接口列表中搜索编号最小的已配置接口(不包括 loopback),这可能会变成例如“eth0”。在具有2.2或更高版本内核的Linux系统上,可以使用“any”的接口参数来捕获来自所有接口的数据包。 请注意,“any”设备上的捕获将不会在混杂模式下完成。如果支持-D标志,则可以用其显示的接口号可用作接口参数。
-I (大写i)或 --monitor-mode 将接口置于“监控模式”; 这仅在IEEE 802.11 Wi-Fi接口上受支持,并且仅在某些操作系统上受支持。请注意,在监视器模式下,适配器可能与与其关联的网络取消关联,因此您将无法使用该适配器的任何无线网络。 如果您在监视器模式下捕获并且未使用其他网络适配器连接到另一个网络,则可能会阻止访问网络服务器上的文件或解析主机名或网络地址。 该标志将影响-L标志的输出。 如果未指定-I,则仅显示未处于监视模式时可用的链接层类型; 如果指定-I,则仅显示处于监视模式时可用的链接层类型。
--immediate-mode 以“立即模式”捕获。 在此模式下,数据包一到达就会传送到tcpdump,而不是为了提高效率而进行缓冲。 这是打印数据包时的默认设置,而不是在将数据包将数据包保存到文件或管道时的设置。
-j tstamp_type 或 --time-stamp-type=tstamp_type 将捕获的时间戳类型设置为tstamp_type。 用于时间戳类型的名称在pcap-tstamp中给出; 并非所有列出的类型都必须对任何给定的接口有效。
-J 或 --list-time-stamp-types 列出接口支持的时间戳类型并退出。 如果无法为接口设置时间戳类型,则不会列出时间戳类型。
--time-stamp-precision=tstamp_precision 捕获时,将捕获的时间戳精度设置为tstamp_precision。请注意,高精度时间戳(纳秒)的可用性及其实际精度取决于平台和硬件。当以纳秒精度将捕获写入保存文件时,时间戳以纳秒分辨率写入,文件使用不同的幻数编写,以指示时间戳以秒和纳秒为单位;并非所有读取pcap savefiles的程序都能读取这些捕获。读取保存文件时,将时间戳转换为timestamp_precision指定的精度,并以该分辨率显示它们。如果指定的精度小于文件中时间戳的精度,则转换将失去精度。timestamp_precision支持的值micro是微秒级分辨率和nano就纳秒级分辨率。默认值为微秒分辨率。
-K或--dont-verify-checksums 请勿尝试验证IP,TCP或UDP校验和。 这对于在硬件中执行部分或全部 校验和 计算的接口非常有用; 否则,所有传出的TCP校验和都将被标记为错误。
-l (小写L) 使用标准输出行级缓冲。 如果您想在捕获数据时查看数据,则非常有用。 例如。
tcpdump -l | tee dat 或 tcpdump -l > dat & tail -f dat
请注意,在Windows上,“行级缓冲”表示“无缓冲”,因此如果指定了-l,WinDump将单独写入每个字符。
-U在其行为中类似于-l,但它会导致输出为“数据包缓冲”,因此输出在每个数据包的末尾而不是在每行的末尾写入标准输出stdout; 这是在所有平台上缓存的,包括Windows。
-L 或 --list-data-link-types 在指定模式下列出接口的已知数据链接类型,然后退出。 已知数据链接类型列表可能取决于指定的模式; 可以使用-I(大写i)来指定是否处于监控模式
-m module 从文件模块加载SMI MIB模块定义。 可以多次使用此选项将多个MIB模块加载到tcpdump中。
-M secret 使用secret作为共享密钥,使用TCP-MD5选项(RFC 2385)验证TCP段中的摘要(如果存在)。
-n 不要将主机地址转换为名称。 这可用于避免DNS查找。
-nn不要将协议和端口号等转换为名称。
-N不打印主机名的域名限定。 例如,如果你给这个标志,那么tcpdump将打印``nic''而不是``nic.ddn.mil''。
-#或 --number 在行的开头打印一个可选的包号
-O或 --no-optimize 不要运行数据包匹配代码优化器。仅当您怀疑优化程序中存在错误时,此选项才有用。
-p 或 --no-promiscuous-mode 不要将接口置于混杂模式。请注意,由于某些其他原因,接口可能处于混杂模式;因此,`-p'不能用作`ether host {local-hw-addr} or ether broadcast'的缩写。
-Q|-P direction 或 --direction=direction 选择应捕获数据包的发送/接收方向。可能的值是“in”,“out”和“inout”。并非适用于所有平台。
-q 静默输出。打印较少的协议信息,使输出行更短。
-r file 从file文件读取数据包(使用-w选项或其他工具创建的pcap或pcap-ng文件)。如果file是“ - ”,则使用标准输入。
-S 或 --absolute-tcp-sequence-numbers 打印绝对而非相对的TCP序列号
-s snaplen 或 --snapshot-length=snaplen 设置快照大小为snaplen,而不是默认的262144字节。 由于快照有限而被截断的数据包在输出中用``[| proto]''表示,其中proto是发生截断的协议级别的名称。 请注意,拍摄较大的快照会增加处理数据包所需的时间,并明显地减少数据包缓冲量。 这可能会导致数据包丢失。 您应该将snaplen限制为捕获您感兴趣的协议信息的最小数字。将snaplen设置为0会将其设置为默认值262144,以便向后兼容最新版本的tcpdump。
-T type 强制“expression”选择的数据包将被解释为指定的类型。目前已知的类型是aodv(Ad-hoc按需距离矢量协议),carp(通用地址冗余协议),cnfp(Cisco NetFlow协议),lmp(链路管理协议),pgm(实用通用多播),pgm_zmtp1(ZMTP / 1.0内部PGM / EPGM),resp(REdis序列化协议),radius(RADIUS),rpc(远程过程调用),rtp(实时应用程序协议),rtcp(实时应用程序控制协议),snmp(简单网络管理)协议),tftp(普通文件传输协议),增值税(视觉音频工具),wb(分布式白板),zmtp1(ZeroMQ消息传输协议1.0)和vxlan(虚拟可扩展局域网)。
-t 不要在每个dump行上打印时间戳。
-tt 打印时间戳,自1970年1月1日00:00:00,UTC以及自该时间以来秒钟数。
-ttt 在每个dump行上打印的当前行和上一行之间时间差delta(微秒分辨率)。
-tttt 打印时间戳,以小时,分钟,秒和从00:00:00开始的秒钟数,在每个dump行上的日期开始。
-ttttt 在每个dump行上打印的当前行和第一行之间时间差delta(微秒分辨率)。
-u 打印未解码的NFS句柄。
-U或 --packet-buffered 如果未指定-w选项,则使打印的数据包输出``packet-buffered''; 即,当打印每个分组的内容的描述时,它将被写入标准输出,而不是在不写入终端时,仅在输出缓冲器填满时写入。如果指定了-w选项,则使保存的原始数据包输出``packet-buffered''; 即,在保存每个数据包时,它将被写入输出文件,而不是仅在输出缓冲区填满时才写入。
-v 解析和打印时,产生(略多)详细输出。 例如,打印IP包中的生存时间,标识,总长度和选项。 还可以启用其他数据包完整性检查,例如验证IP和ICMP标头校验和。 使用-w选项写入文件时,每隔10秒报告一次捕获的数据包数。
-vv更详细的输出。 例如,从NFS回复数据包打印其他字段,并完全解码SMB数据包。
-vvv更详细的输出。 例如,telnet SB ... SE选项全部打印。 使用-X Telnet选项也以十六进制打印。
-V文件, 从文件中读取文件名列表。 如果文件是“ - ”,则使用标准输入。
-w文件 将原始数据包写入文件而不是解析并打印出来。稍后可以使用-r选项打印它们。如果文件是“ - ”,则使用标准输出。 如果写入文件或管道,则此输出将被缓冲,因此从文件或管道读取的程序在收到后可能无法在任意时间内看到数据包。使用-U标志可以在收到数据包后立即写入数据包。 MIME类型application / vnd.tcpdump.pcap已在IANA注册用于pcap文件。文件扩展名.pcap似乎是最常用的.cap和.dmp。 Tcpdump本身在读取捕获文件时不检查扩展,并且在写入时不添加扩展(它在文件头中使用幻数)。但是,许多操作系统和应用程序将使用扩展名(如果存在)并建议添加一个(例如.pcap)。有关文件格式的说明,请参阅pcap-savefile(5)。
-W 与-C选项一起使用时,这会将创建的输出文件数限制为指定的数字,并从头开始覆盖文件,从而创建一个循环使用的缓冲区。 此外,它会将文件命名为具有足够的前导0以支持最大数量的文件,从而允许它们正确排序。与-G选项一起使用时,这将限制创建的旋转转储文件的数量,在达到限制时退出状态0。 如果与-C一起使用,则行为将导致每个时间片的循环文件。
-x 解析和打印时,除了打印每个数据包的标题外,还要以十六进制格式打印每个数据包的数据(除去其链接级别标题)。 将打印整个数据包或snaplen字节中较小的一个。注意,这是整个链路层分组,因此对于填充(例如以太网)的链路层,当较高层分组比所需填充短时,也将打印填充字节。
-xx 在解析和打印时,除了打印每个数据包的标头外,还要打印每个数据包的数据,包括其链接级别标题,以十六进制表示。
-X 解析和打印时,除了打印每个数据包的标头外,还要以十六进制和ASCII格式打印每个数据包的数据(除去其链接级别标题)。 这对于分析新协议非常方便。
-XX 解析和打印时,除了打印每个数据包的标头外,还要以十六进制和ASCII格式打印每个数据包的数据,包括其链接级别标题。
-y datalinktype或 --linktype=datalinktype 将数据包捕获时用到的数据链接类型设置为datalinktype。
-z postrotate-command 与-C或-G选项一起使用时,每次输出文件在轮换后关闭后,执行“postrotate-command file”, 例如,指定-z gzip或-z bzip2将使用gzip或bzip2压缩每个savefile。请注意,tcpdump将使用最低优先级并行捕获命令,以便不会干扰捕获过程。 如果您想使用一个本身带有标志或不同参数的命令,您总是可以编写一个shell脚本,它将保存文件名作为唯一参数,制作标志和参数排列并执行您想要的命令。
-Z user 或 --relinquish-privileges=user 如果tcpdump以root身份运行,则在打开捕获设备或输入savefile之后,但在打开任何输出的savefiles之前,请将用户ID更改为user,将组ID更改为用户的主要组。默认情况下,在编译时也可以启用此行为。
expression 表达式 选择要dump的数据包。 如果没有给出表达式,网络上的所有数据包都将被dump。 否则,只会dump表达式为“true”的数据包。 expression的语法请查看pcap-filter(7).。在表达式中出现的shell元字符建议使用单引号包围。
接下来使用man pcap-filter查看,pcap-filter 使用包过滤器语法,expression包括一个或多个原语,原语通常包含一个id(名称或数字),前面加上一个或多个id的限定符。有以下三种原语
type: 指定ID的类型,可能的类型是host,net,port和portrange。 例如,`host foo',`net 128.3',`port 20',`portrange 6000-6008'。 如果没有类型限定符,则假定host。
dir :此限定符指定id的特定传输方向。 可能的方向有src,dst,src或dst,src和dst,ra,ta,addr1,addr2,addr3和addr4。 例如,`src foo',`dst net 128.3',`src或dst port ftp-data'。 如果没有dir限定符,则假定为src或dst。 ra,ta,addr1,addr2,addr3和addr4限定符仅对IEEE 802.11无线LAN链路层有效。 对于某些链路层,例如SLIP等,入站和出站限定符可用于指定所需的方向。
proto: 此限定符将匹配限制为特定协议。 可能的协议是: ether,fddi,tr,wlan,ip,ip6,arp,rarp,decnet,tcp和udp。 例如,`ether src foo',`arp net 128.3',`tcp port 21',`udp portrange 7000-7009',`wlan addr2 0:2:3:4:5:6'。 如果没有proto限定符,则假定所有与该类型一致的协议。 例如,`src foo'表示`(ip或arp或rarp)src foo'(除了后者不是合法语法),`net bar'表示`(ip或arp或rarp)net bar'和`port 53'表示 `(tcp或udp)端口53'。
除了使用限定符和ID组成的表达式原语,还有关键字表达式原语:gateway,broadcast,less,greater以及算术表达式。
可以使用and、or和not来进行表达式逻辑运算,例如:‘host foo and not port ftp and not port ftp-data’,再比如:‘`tcp dst port ftp or ftp-data or domain' 和 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'是一样的
3、 详细叙述僵尸进程产生的原因以及危害
僵尸进程zombie是进程的一种特殊状态,出现在父进程创建了子进程,当子进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。或者父进程也出现异常挂掉,子进程运行退出后得不到父进程来处理进行资源回收,子进程就会进入Z状态即成为僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
产生原因:
在子进程终止后到父进程调用wait()前的时间里,子进程被称为zombie;
a. 子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它
b. 父进程没有调用wait()或waitpid()函数来等待子进程的结束
c. 网络原因有时会引起僵尸进程;
僵尸进程的危害:占用系统资源,造成内存泄漏。如果很多,则会严重影响服务器的性能;
4、 详细说明vmstat输出结果的含义
vmstat命令主要用来动态显示系统资源的使用情况,资源包括:内存,磁盘、网络、cpu等。
命令用法: vmstat [options] [delay [count]]
选项有:
-s:小写s表示列表显示内存状态数值和一些变化指标的统计,只显示一次。
-S:后可接单位,1000 (k), 1024 (K), 1000000 (m), 或1048576 (M) bytes.但不会影响swap (si/so)和 block (bi/bo)的值
-d: 列出磁盘的读写总量统计表
如果我们用vmstat 2 5 可以每隔2秒显示一次系统资源状态值,执行5次。
显示各列如下所示:
procs -----------memory---------- --swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
每一列所表示的含义如下:
procs:进程相关的指标
r:等待运行的进程的个数(队列长度)
b:处于不可中断睡眠状态的进程的个数(即IO阻塞队列长度)
memory:内存相关指标
swpd:交换内存使用量
free:物理内存空闲量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
swap:交换分区相关指标
si:数据进入swap中的速率(kb/s)
so:数据离开swap的速率(kb/s)
io:IO相关的指标
bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据至块设备的速率(kb/s)
system:系统相关的指标
in:中断速率,每秒被中断的次数
cs:进程切换的速率
cpu:cpu相关的指标
us: user space用户空间运行程序占用CPU的百分比
sy:system(kernel space)运行于内核空间的程序占用CPU的百分比
id:idle空间CPU百分比
wa:wait io 等待I/O花费时间
st: stolen 被虚拟机“偷走”的CPU百分比。