1.抓包方式
Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包
tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
tcpdump
-i:监听哪一个网卡 -A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据 (nt: 即Handy for capturing web pages) -n:不把ip解析成主机名 -nn:不把端口解析成应用层协议 -c:收到指定的数据包数目后,就停止进行倾倒操作 -C file-size (nt: 此选项用于配合-w file 选项使用):该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576) -d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出 -dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出 -ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出 -e:在每列倾倒资料上显示连接层级的文件头 -f:用数字显示网际网络地址 -F:使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略 -i:指定tcpdump 需要监听的接口. 如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口 (不包括 loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束 -L:列出指定网络接口所支持的数据链路层的类型后退出 -s:设置每个数据包的大小 -S:不把随机序列和确认序列解析成绝对值 -w:将流量保存到文件中,文件中的信息是无法直接查看的 -r:读取文件中的内容 -m:通过module 指定的file 装载SMI MIB 模块(nt: SMI,Structure of Management Information, 管理信息 结构MIB, Management Information Base, 管理信息库. 可理解为, 这两者用于SNMP(Simple Network Management Protoco) 协议数据包的抓取. 具体SNMP 的工作原理未知, 另需补充) -M:如果TCP 数据包(TCP segments)有TCP-MD5选项(在RFC 2385有相关描述), 则为其摘要的验证指定一个公共的密钥secret -t:在每行输出中不打印时间戳 -tt:不对每行输出的时间进行格式处理(nt: 这种格式一眼可能看不出其含义, 如时间戳打印成1261798315) -ttt:输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位) -tttt:在每行打印的时间戳之前添加日期的打印 -v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息 -vv:输出详细的报文信息 -x:用十六进制字码列出数据包资料 -w:把数据包数据写入指定的文件
安装tcpdump
yum install -y tcpdump
默认启动
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包
tcpdump -vv
过滤主机
抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据
tcpdump -i eth1 host 192.168.1.1
指定源地址,192.168.1.1
tcpdump -i eth1 src host 192.168.1.1
指定目的地址,192.168.1.1
tcpdump -i eth1 dst host 192.168.1.1
过滤端口
抓取所有经过eth1,目的或源端口是80的网络数据
tcpdump -i eth1 port 80
指定源端口
tcpdump -i eth1 src port 80
指定目的端口
tcpdump -i eth1 dst port 80
协议过滤
tcpdump -i eth1 arp tcpdump -i eth1 ip tcpdump -i eth1 tcp tcpdump -i eth1 udp tcpdump -i eth1 icmp
抓tcp某端口的数据包
tcpdump -i eth0 tcp port 21 -nn
常用表达式
非 : ! or "not" (去掉双引号) 且 : && or "and" 或 : || or "or"
抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
2.Linux常用网络命令
Centos-7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比eth0、wlan0更难读。比如enp5s0
biosdevname和net.ifnames两种命名规范
net.ifnames的命名规范为
设备类型+设备位置+数字
设备类型:
en 表示Ethernet
wl 表示WLAN
ww 表示无线广域网WWAN
实际的例子:
eno1 板载网卡
enp0s2 pci网卡
ens33 pci网卡
wlp3s0 PCI无线网卡
wwp0s29f7u2i2 4G modem
wlp0s2f1u4u1 连接在USB Hub上的无线网卡
biosdevname的命名规范为
根据系统BIOS提供的信息对网络接口进行重命名。
em[1-N] #表示主板(嵌入式)NIC (对应机箱标签)
pci #表示PCI插槽中的卡,端口1至N
实际的例子:
em1 板载网卡
p3p4 pci网卡
p3p4_1 虚拟网卡
CentOS-7
默认内核参数(biosdevname=0(dell服务器默认是1),net.ifnames=1): 网卡名 “enp5s2”
biosdevname=1,net.ifnames=0:网卡名 “em1”
biosdevname=0,net.ifnames=0:网卡名 “eth0” (最传统的方式,eth0 eth1)
定义网卡命令规则
在安装系统时,选择安装选项,按tab键,在跳出的一行内容后面添加net.ifnames=0 biosdevname=0
命令行设置网卡名称规则
[root@dmxsp ~]#cd /etc/sysconfig/network-scripts/ #修改网卡配置文件 [root@dmxspnetwork-scripts]# mv ifcfg-ens33 ifcfg-eth0 [root@dmxsp network-scripts]# sed -i "s#ens33#eth0#g" ifcfg-eth0 [root@dmxsp ~]# vim /etc/sysconfig/grub #GRUB添加kernel参数 GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet" [root@dmxsps ~]# grub2-mkconfig -o /boot/grub2/grub.cfg [root@dmxsp ~]# reboot #重启系统生效
网卡配置文件详解
动态ip地址和静态ip有什么区别
动态IP上网,又叫做DHCP上网
自动获取IP上网。动态IP这种上网方式,在未使用路由器的情况下,只需要把这根宽带网线连接到电脑上,电脑上的IP地址设置为自动获得,电脑就可以实现上网了
静态IP上网,又叫做固定IP地址上网
这种上网方式,宽带运营商会提供一根一个IP地址、子网掩码、网关和DNS服务器地址给用户。在未使用路由器的情况下,只需要把这根入户网线连接到电脑上,并且手动设置电脑上的IP地址,这样电脑才能上网
动态IP和静态IP的区别在于:动态IP需要在连接网络时自动获取IP地址以供用户正常上网,而静态IP是ISP在装机时分配给用户的IP地址,可以直接连接上网,不需要获取IP地址
动态IP和静态IP
动态ip
[root@dmxsp ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="fb32c09d-5a9f-40b9-852b-0f44ff2202ed" DEVICE="eth0" ONBOOT="yes"
静态ip
[root@dmxsp ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="static" NAME="eth0" DEVICE="eth0" ONBOOT="yes" IPADDR="10.0.0.88" NETMASK="255.255.255.0" GATEWAY="10.0.0.254" DNS1="223.5.5.5" DNS2="223.6.6.6"
详解
TYPE=Ethernet:网卡类型,一般是Ethernet,还有其他的如bond,bridge
BOOTPROTO=dhcp:获取IP地址的方式,启动的协议,获取配置的方式。
dhcp表示动态获取
static或none表示静态手工配置,若想使用本地配置好的IP则应该设置成这个
DEFROUTE=yes:是否设置默认路由,若为yes则可以在该文件通过PREFIX这个参数来设置子网掩码
PEERDNS=yes:yes表示由DHCP来获取DNS, no表示/etc/resolv.conf来控制,默认为yes。
yes:如果DNS设置,修改/etc/resolv.conf中的DNS
no:不修改/etc/resolv.conf中的DNS
NAME=eth0:这个参数对应的值是网卡名,是给用户看的
UUID=… :通用唯一识别码,若vmware克隆的虚拟机无法启动网卡可以去除此项
DEVICE=eth0:系统逻辑设备名
ONBOOT=yes:开机启动时是否激活网卡设备,centos7装完网卡后默认设置成no
HWADDR=… :以太网硬件地址,mac地址)。若是vmware克隆的虚拟机无法启动网卡,也要改这个。
NM_CONTROLLED=yes:是否通过NetworkManager管理网卡设备
IPADDR=… :设置网卡对应的IP地址,网络服务启动,网卡激活后会自动将该地址配置到网卡上
前提(BOOTPROTO=static)而不是dhcp
PREFIX=24:子网掩码长度,不要这么写PREFIX=255.255.255.0
NETMASK=255.255.255.0:生产环境中一般用这种方式指定子网掩码
GATEWAY=10.0.0.254:该网卡配置的IP对应的网关(默认路由)
若主机是多网卡设备,该参数只能在一个网卡配置文件里面出现,一台主机只有一个默认路由
DNS1=…:主DNS,若这里设置了值,则会优先于/etc/resolv.conf中设置的DNS服务器的地址
需要和“PEERDNS=no”配合使用
DNS2=… :次dns
USERCTL=no:USERCTL=yes/no是否允许非root用户控制该设备
IPV6INIT=no:是否启用IPV6
BROADCAST=…:广播地址
PROXY_METHOD=none:代理方式,一般不用这个参数
BROWSER_ONLY=no:没有什么用。
修改网卡配置文件的方法
vim /etc/sysconfig/network-scripts/ifcfg-eth0
nmtui:需要开启NetworkManger