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

作者 dmxsp

发表回复

您的电子邮箱地址不会被公开。