目录
1.ipconfig
- 查看当前操作系统的网卡和IP地址信息:ipconfig
2.ifconfig命令
在Linux上与ipconfig相对应的命令是ifconfig。
1.显示激活的机器网卡信息
root@romoteHost:~# ifconfig
// UP:表示“接口已启用”。
// BROADCAST :表示“主机支持广播”。
// RUNNING:表示“接口在工作中”。
// MULTICAST:表示“主机支持多播”。
// MTU:1500(最大传输单元):1500字节
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
// inet :网卡的IP地址。
// netmask :网络掩码。
// broadcast :广播地址。
inet 172.20.118.232 netmask 255.255.240.0 broadcast 172.20.127.255
// 网卡的IPv6地址
inet6 fe80::216:3eff:fe19:bf07 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:19:bf:07 txqueuelen 1000 (Ethernet)
// RX packets 接收时,正确的数据包数。
// RX bytes 接收的数据量。
// RX errors 接收时,产生错误的数据包数。
// RX dropped 接收时,丢弃的数据包数。
// RX overruns 接收时,由于速度过快而丢失的数据包数。
// RX frame 接收时,发生frame错误而丢失的数据包数。
RX packets 1734930 bytes 291829453 (291.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
// TX packets 发送时,正确的数据包数。
// TX bytes 发送的数据量。
// TX errors 发送时,产生错误的数据包数。
// TX dropped 发送时,丢弃的数据包数。
// TX overruns 发送时,由于速度过快而丢失的数据包数。
// TX carrier 发送时,发生carrier错误而丢失的数据包数。
// collisions 冲突信息包的数目。
TX packets 1534071 bytes 295898806 (295.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1401583 bytes 211827929 (211.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1401583 bytes 211827929 (211.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
上述输出显示机器当前激活的两个网卡相关信息。
2.显示简要的网卡信息
root@romoteHost:~# ifconfig -s
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 1740634 0 0 0 1538903 0 0 0 BMRU
lo 65536 1402189 0 0 0 1402189 0 0 0 LRU
3.显示所有的网卡信息:包括未激活的网卡
ifconfig -a
4.激活或者禁用某个网卡
ifconfig 网卡名 up // up表示启动
ifconfig 网卡名 down // down表示关闭
5.配置和删除IP地址
ifconfig 网卡名 add ip地址
ifconfig 网卡名 del ip地址
2.ping命令
- ping命令是通过ICMP数据包来实现的。用来侦测本机到目标主机的网络是否通畅。
ping IP地址或者ping 域名
- ping命令的选项:使用ping命令查看。
- 在Windows上使用ping命令默认发送4个数据包后停止运行,如果需要一直发送而不停止:则使用
ping xxx -t
- 在Windows上使用ping命令默认发送4个数据包后停止运行,如果需要一直发送而不停止:则使用
- 使用ping命令检查网络的连通性的步骤:
- 使用ipconfig/all观察本地网络是否正确
- ping127.0.0.1,检查本地的TCP、IP协议是否设置好
- ping本机的IP地址,检查本机的IP地址是否设置有误
- ping本网网关或者本网IP地址,用于检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常。
- ping本地DNS地址,检查本地DNS服务器是否工作正常
- ping远程IP地址,检查本网或者本机与外部的连接是否正常
3.telnet命令
- 连接一个网络服务,可以使用
telnet IP port
来连接该服务。如果不指定端口号,telnet 会使用默认 23 号端口。 - 示例:测试百度提供的web服务是否可用
telnet www.baidu.com 80
4.netstat命令
- 该命令用于查看网络连接状态。常见选项如下:
1. -a 显示所有选项,netstat 默认不显示 LISTEN 相关。
2. -t 仅显示 tcp 相关选项
3. -u 仅显示 udp 相关选项
4. -n 不显示别名,能显示数字的全部转化成数字(所有IP地址和端口号将以数字显示)
5. -l 仅列出在侦听客户端连接的服务状态
6. -p 显示建立相关链接的程序名和进程id
7. -r 显示路由信息,路由表
8. -e 显示扩展信息,例如uid等
9. -s 按各个协议进行统计
10. -c 每隔一个固定时间,执行该 netstat 命令。
- 列出所有tcp端口:
netstat -ant
- 列出所有udp端口:
netstat -anu
- 只显示监听端口:
netstat -l
- 只列出所有监听tcp端口:
netstat -lt
- 只列出所有监听udp端口:
netstat -lu
- 只列出所有监听UNIX域的端口:
netstat -lx
- 找出程序运行的端口:
netstat -ap | grep 程序名
- 显示网络接口列表:
netstat -i
5.lsof
- lsof(list opened file descriptor)是Linux系统的扩展工具,表示列出打开的文件描述符
- -i选项,表示仅显示系统的网络连接信息
root@romoteHost:~# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-n 411 systemd-network 19u IPv4 17128 0t0 UDP romoteHost:bootpc
systemd-r 421 systemd-resolve 12u IPv4 17138 0t0 UDP localhost:domain
systemd-r 421 systemd-resolve 13u IPv4 17139 0t0 TCP localhost:domain (LISTEN)
chronyd 473 _chrony 5u IPv4 18556 0t0 UDP localhost:323
chronyd 473 _chrony 6u IPv6 18557 0t0 UDP localhost:323
sshd 530 root 3u IPv4 18852 0t0 TCP *:ssh (LISTEN)
AliYunDun 669 root 20u IPv4 20568 0t0 TCP romoteHost:35872->100.100.30.26:http (ESTABLISHED)
sshd 1230 root 4u IPv4 38467 0t0 TCP romoteHost:ssh->124.160.215.184:44387 (ESTABLISHED)
sss 1289 root 3u IPv4 42584 0t0 TCP *:8888 (LISTEN)
sshd 1292 root 4u IPv4 42589 0t0 TCP romoteHost:ssh->124.160.215.184:24990 (ESTABLISHED)
lsof -i
默认会显示ip地址和端口号的别名,例如22端口显示成ssh。需要显示IP地址和端口号加上-Pn
选项。-P表示显示数字形式的端口号,-n表示显示数字形式的IP地址
root@romoteHost:~# lsof -nPi
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-n 411 systemd-network 19u IPv4 17128 0t0 UDP 172.20.118.232:68
systemd-r 421 systemd-resolve 12u IPv4 17138 0t0 UDP 127.0.0.53:53
systemd-r 421 systemd-resolve 13u IPv4 17139 0t0 TCP 127.0.0.53:53 (LISTEN)
chronyd 473 _chrony 5u IPv4 18556 0t0 UDP 127.0.0.1:323
chronyd 473 _chrony 6u IPv6 18557 0t0 UDP [::1]:323
sshd 530 root 3u IPv4 18852 0t0 TCP *:22 (LISTEN)
AliYunDun 669 root 20u IPv4 20568 0t0 TCP 172.20.118.232:35872->100.100.30.26:80 (ESTABLISHED)
sshd 1230 root 4u IPv4 38467 0t0 TCP 172.20.118.232:22->124.160.215.184:44387 (ESTABLISHED)
sss 1289 root 3u IPv4 42584 0t0 TCP *:8888 (LISTEN)
sshd 1292 root 4u IPv4 42589 0t0 TCP 172.20.118.232:22->124.160.215.184:24990 (ESTABLISHED)
- 结合grep命令过滤想要查看打开的进程的fd信息
// sss为进程名
root@romoteHost:~# lsof -i | grep sss
sss 1289 root 3u IPv4 42584 0t0 TCP *:8888 (LISTEN)
- 使用
lsof -p pid
也能过滤出指定的进程打开的 fd 信息
root@romoteHost:~# lsof -p 1289
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sss 1289 root cwd DIR 252,1 4096 1441793 /prac
sss 1289 root rtd DIR 252,1 4096 2 /
sss 1289 root txt REG 252,1 17696 1441974 /prac/sss
sss 1289 root mem REG 252,1 2029224 658508 /usr/lib/x86_64-linux-gnu/libc-2.31.so
sss 1289 root mem REG 252,1 191472 658465 /usr/lib/x86_64-linux-gnu/ld-2.31.so
sss 1289 root 0u CHR 136,0 0t0 3 /dev/pts/0
sss 1289 root 1u CHR 136,0 0t0 3 /dev/pts/0
sss 1289 root 2u CHR 136,0 0t0 3 /dev/pts/0
sss 1289 root 3u IPv4 42584 0t0 TCP *:8888 (LISTEN)
sss 1289 root 4u a_inode 0,14 0 11381 [eventpoll]
- 监控用户,查看指定用户打开的文件:
lsof -u 用户名
- 监控程序,查看指定程序打开的文件:
lsof -c 程序名
- 监控打开的文件和设备,
lsof /dev/tty
- 查看指定端口运行情况:
lsof -i:端口号
- 显示指定文件描述符的进程:
lsof -d FD
6.nc命令
nc全称netcat。
- 模拟一个服务器程序:可以模拟一个服务器程序被其他客户端连接
// 示例:在指定的IP和端口上开启一个服务
// (-v表示显示更详细的信息,l表示listen)
root@romoteHost:~# nc -v -l 127.0.0.1 8888
Listening on localhost 8888
// -k选项表示不断开连接
nc -v -l 127.0.0.1 8888 -k
- 模拟一个客户端程序
// 模拟一个客户端程序连接百度web服务器
root@romoteHost:~# nc -v www.baidu.com 80
Connection to www.baidu.com 80 port [tcp/http] succeeded!
// 模拟指定端口号的客户端程序连接服务器(使用-p选项)
root@romoteHost:~# nc -v -p 8888 www.baidu.com 80
Connection to www.baidu.com 80 port [tcp/http] succeeded!
// 使用lsof命令验证如下
root@romoteHost:~# lsof -Pni | grep nc
nc 13174 root 3u IPv4 237374 0t0 TCP 172.20.118.232:8888->180.101.49.11:80 (ESTABLISHED)
- nc命令发送文件:
- 接收文件的一方:
// > 1.txt表示将接收到的文件保存到1.txt中 nc -v -l 192.168.0.109 8888 > 1.txt
- 发送文件的一方:
// < Hello.go表示发送Hello.go文件 nc -v 123.60.153.60 8888 < Hello.go
7.curl命令
curl命令在Linux上可以模拟发送http请求。
- 基础用法:
curl 页面URL
(默认行为是把目标页面内容输出到 shell 窗口)
// 输出目标页面内容到shell窗口
root@romoteHost:~# curl http://www.baidu.com
// 将页面保存到本地
root@romoteHost:~# curl http://www.baidu.com -o index.html
等同于curl http://www.baidu.com > index.html
- 显示指定请求方式:-X选项(不指定默认使用GET方式)
curl www.baidu.com -X GET
- 使用post请求方式时,-d选项指定请求体的内容
- -H指定请求头部的信息
8.tcpdump命令
tcpdump 是Linux系统提供的一个非常强大的抓包工具。网卡名可以使用ifconfig
命令获得。
- -i 指定要捕获的目标网卡名
## 抓取网卡lo上的包
tcpdump -i lo
## 抓取所有网卡上的包
tcpdump -i any
- -X 以ASCII和十六进制的形式输出捕获的数据包内容,减去链路层的包头信息;
- -XX以ASCII和十六进制的形式输出捕获的数据包内容,包括链路层的包头信息。
- -n将IP地址显示成数字
- -nn将IP地址和端口号显示成数字。
- -S以绝对值显示包的ISN号(包序列号),默认以上一包的偏移量显示。
- -vv抓包的信息详细地显示;
- -vvv抓包的信息更详细地显示。
- -w将抓取的包的原始信息(不解析,也不输出)写入文件中,后跟文件名,例如
tcpdump -i any -w filename
- -r从利用-w选项保存的包文件中读取数据包信息。
- -e表示开启以太网帧头部信息的显示。注意:tcpdump不统计以太网帧尾部4个字节的CRC字段。
- -c:指定要监听的数据包的数量
- 截取某个主机相关的包:
tcpdump host 192.168.191.162
- 截获主机1和主机2或者3的通信
tcpdump host 主机1 and \(主机2 or 主机3\)
- 截取某个端口的包
tcpdump port xxx
- 抓取单方向的包
# 从指定端口发出的包
tcpdump src port xxx
# 发往指定端口的包
tcpdump dst port xxx
9.practice
1.排查一个服务的指定端口是否开启侦听
- 在Windows上可以使用以下方式:
- 使用netstat命令:
// -n表示以数字形式显示地址和端口号。 // -a表示显示所有连接和侦听端口。 // findstr类似于Linux上的grep,可以对输出结果进一步过滤 netstat -an | findstr port
- 使用telnet命令
telnet ip port
- 在Linux上可以使用以下方式:
- 使用telnet命令
telnet ip port
- 使用
nc -v ip port
命令 - 使用
netstat -an | grep port