1.ipconfig

  1. 查看当前操作系统的网卡和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命令

  1. ping命令是通过ICMP数据包来实现的。用来侦测本机到目标主机的网络是否通畅。
ping IP地址或者ping 域名
  1. ping命令的选项:使用ping命令查看。
    1. 在Windows上使用ping命令默认发送4个数据包后停止运行,如果需要一直发送而不停止:则使用ping xxx -t
  2. 使用ping命令检查网络的连通性的步骤:
    1. 使用ipconfig/all观察本地网络是否正确
    2. ping127.0.0.1,检查本地的TCP、IP协议是否设置好
    3. ping本机的IP地址,检查本机的IP地址是否设置有误
    4. ping本网网关或者本网IP地址,用于检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常。
    5. ping本地DNS地址,检查本地DNS服务器是否工作正常
    6. ping远程IP地址,检查本网或者本机与外部的连接是否正常

3.telnet命令

  1. 连接一个网络服务,可以使用telnet IP port来连接该服务。如果不指定端口号,telnet 会使用默认 23 号端口。
  2. 示例:测试百度提供的web服务是否可用
telnet www.baidu.com 80

4.netstat命令

  1. 该命令用于查看网络连接状态。常见选项如下:
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 命令。
  1. 列出所有tcp端口:netstat -ant
  2. 列出所有udp端口:netstat -anu
  3. 只显示监听端口:netstat -l
  4. 只列出所有监听tcp端口: netstat -lt
  5. 只列出所有监听udp端口: netstat -lu
  6. 只列出所有监听UNIX域的端口:netstat -lx
  7. 找出程序运行的端口:netstat -ap | grep 程序名
  8. 显示网络接口列表:netstat -i

5.lsof

  1. lsof(list opened file descriptor)是Linux系统的扩展工具,表示列出打开的文件描述符
  2. -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)
  1. 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)
  1. 结合grep命令过滤想要查看打开的进程的fd信息
// sss为进程名
root@romoteHost:~# lsof -i | grep sss
sss       1289            root    3u  IPv4  42584      0t0  TCP *:8888 (LISTEN)
  1. 使用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]
  1. 监控用户,查看指定用户打开的文件:lsof -u 用户名
  2. 监控程序,查看指定程序打开的文件:lsof -c 程序名
  3. 监控打开的文件和设备,lsof /dev/tty
  4. 查看指定端口运行情况:lsof -i:端口号
  5. 显示指定文件描述符的进程:lsof -d FD

6.nc命令

nc全称netcat。

  1. 模拟一个服务器程序:可以模拟一个服务器程序被其他客户端连接
// 示例:在指定的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

  1. 模拟一个客户端程序
// 模拟一个客户端程序连接百度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)
  1. nc命令发送文件:
    1. 接收文件的一方:
    // > 1.txt表示将接收到的文件保存到1.txt中
    nc -v -l 192.168.0.109  8888 > 1.txt
    
    1. 发送文件的一方:
    // < Hello.go表示发送Hello.go文件
    nc -v 123.60.153.60 8888 < Hello.go
    

7.curl命令

curl命令在Linux上可以模拟发送http请求。

  1. 基础用法: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
  1. 显示指定请求方式:-X选项(不指定默认使用GET方式)
curl www.baidu.com -X GET
  1. 使用post请求方式时,-d选项指定请求体的内容
  2. -H指定请求头部的信息

8.tcpdump命令

tcpdump 是Linux系统提供的一个非常强大的抓包工具。网卡名可以使用ifconfig命令获得。

  1. -i 指定要捕获的目标网卡名
## 抓取网卡lo上的包
tcpdump -i lo
## 抓取所有网卡上的包
tcpdump -i any
  1. -X 以ASCII和十六进制的形式输出捕获的数据包内容,减去链路层的包头信息;
  2. -XX以ASCII和十六进制的形式输出捕获的数据包内容,包括链路层的包头信息。
  3. -n将IP地址显示成数字
  4. -nn将IP地址和端口号显示成数字。
  5. -S以绝对值显示包的ISN号(包序列号),默认以上一包的偏移量显示。
  6. -vv抓包的信息详细地显示;
  7. -vvv抓包的信息更详细地显示。
  8. -w将抓取的包的原始信息(不解析,也不输出)写入文件中,后跟文件名,例如
tcpdump -i any -w filename
  1. -r从利用-w选项保存的包文件中读取数据包信息。
  2. -e表示开启以太网帧头部信息的显示。注意:tcpdump不统计以太网帧尾部4个字节的CRC字段。
  3. -c:指定要监听的数据包的数量
  4. 截取某个主机相关的包:
tcpdump host 192.168.191.162
  1. 截获主机1和主机2或者3的通信
tcpdump host 主机1 and \(主机2 or 主机3\)
  1. 截取某个端口的包
tcpdump port xxx
  1. 抓取单方向的包
# 从指定端口发出的包
tcpdump src port xxx
# 发往指定端口的包
tcpdump dst port xxx

9.practice

1.排查一个服务的指定端口是否开启侦听
  1. 在Windows上可以使用以下方式:
    1. 使用netstat命令:
    // -n表示以数字形式显示地址和端口号。
    // -a表示显示所有连接和侦听端口。
    // findstr类似于Linux上的grep,可以对输出结果进一步过滤
    netstat -an | findstr port
    
    1. 使用telnet命令
    telnet ip port
    
  2. 在Linux上可以使用以下方式:
    1. 使用telnet命令
    telnet ip port
    
    1. 使用nc -v ip port命令
    2. 使用netstat -an | grep port