Linux网络工具简介

学习计算机网络不能只学习理论知识,同时必须学会网络工具的使用,用网络工具来快速判断自己程序的网络状态并发现问题。第一次使用网络工具前需要先下载安装:

  • 安装网络工具包net-tools
    网络工具包包含很多常用的网络命令,其中最常用的是ifconfig和netstat
apt-get install net-tools//Ubuntu
yum -y install net-tools//centos
  • 安装tcpdump
apt-get install tcpdump//Ubuntu
yum -y install tcpdump//centos

tcpdump是一个可以按照自己的筛选和逻辑抓取网络包的工具,使我们可以查看到网络程序与外界网络环境 的交互细节。

  • 安装wireshark(windows)
    wireshark是一个可以在windows、macos上进行网络包可视化查看的GUI工具,比tcpdump更加直观地看到网络包的各种详细信息。
    安装也很简单,去官网下载适合自己的版本按提示安装使用即可。
    wireshark官网:https://www.wireshark.org/

一、ifconfig

可以**查看并配置网络接口(网卡接口)**的工具。

  • 查看本机网卡信息:
LAPTOP-OHBI7I8S% ifconfig
//以太网卡0的IPv4地址,子网掩码,广播地址,网卡状态等信息
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.190.147  netmask 255.255.240.0  broadcast 172.18.191.255
        inet6 fe80::215:5dff:fe9c:b6d9  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:9c:b6:d9  txqueuelen 1000  (Ethernet)
        RX packets 873  bytes 665646 (665.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 631  bytes 373033 (373.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
//本地回环信息,使用此IP可以在访问本机上的网络程序
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 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 关闭/开启网卡:
LAPTOP-OHBI7I8S% ifconfig eth0 down
LAPTOP-OHBI7I8S% ifconfig eth0 up

除了以上的常用功能外,ifconfig还可以设置网卡MAC地址、设置网络设备IP地址、发送广播数据包等功能:

Linux下ifconfig工具使用方法详解 (baidu.com)

二、netstat

ifconfig更多的是起到查看设置底层网络设备的作用;而netstat更偏向查看和设置网络协议的状态

  • 查看当前网络设备中存在的协议详细信息:
LAPTOP-OHBI7I8S% netstat
//当前设备网络环境中存在的外部套接字
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp6       0      0 ip6-localhost:36757     ip6-localhost:50758     ESTABLISHED
tcp6       0      0 ip6-localhost:50756     ip6-localhost:36757     ESTABLISHED
tcp6       0      0 ip6-localhost:36757     ip6-localhost:50756     ESTABLISHED
tcp6       0      0 ip6-localhost:50758     ip6-localhost:36757     ESTABLISHED

//当前设备存在的Unix域套接字
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         STREAM     CONNECTED     20562    
unix  3      [ ]         STREAM     CONNECTED     20561    
unix  3      [ ]         STREAM     CONNECTED     20560  

//还可以利用grep命令在输出结果中筛选指定协议、指定状态、指定IP、Port的条目
LAPTOP-OHBI7I8S% netstat | grep tcp | ESTABLISHED
tcp6       0      0 ip6-localhost:36757     ip6-localhost:50758     ESTABLISHED
tcp6       0      0 ip6-localhost:50756     ip6-localhost:36757     ESTABLISHED
tcp6       0      0 ip6-localhost:36757     ip6-localhost:50756     ESTABLISHED
tcp6       0      0 ip6-localhost:50758     ip6-localhost:36757     ESTABLISHED

//-n参数:禁用DNS协议解析IP地址,查找速度会很快,但看不到域名了
LAPTOP-OHBI7I8S% netstat -n | grep tcp
tcp6       0      0 ::1:36757               ::1:50758               ESTABLISHED
tcp6       0      0 ::1:50756               ::1:36757               ESTABLISHED
tcp6       0      0 ::1:36757               ::1:50756               ESTABLISHED
tcp6       0      0 ::1:50758               ::1:36757               ESTABLISHED

//-p参数:查看使用该协议的进程(列出进程ID和进程名)
LAPTOP-OHBI7I8S% netstat -np | grep tcp
//宽度不够,展示会破坏格式
  • 查看路由表:
//-r参数:查看路由表
LAPTOP-OHBI7I8S% netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
172.18.176.0    0.0.0.0         255.255.240.0   U         0 0          0 eth0
  • 打印所有协议的网络包情况:
//-s参数:查看所有协议网络包的情况
LAPTOP-OHBI7I8S% netstat -s
Ip:
    Forwarding: 2
    1052 total packets received
    0 forwarded
    0 incoming packets discarded
    836 incoming packets delivered
    824 requests sent out
    159 dropped because of missing route
Icmp:
    0 ICMP messages received
    0 input ICMP message failed
    ICMP input histogram:
    7 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
    destination unreachable: 7
Tcp:
    11 active connection openings
    5 passive connection openings
    0 failed connection attempts
    2 connection resets received
    4 connections established
    9764 segments received
    10050 segments sent out
    28 segments retransmitted
    0 bad segments received
    2 resets sent
//and more...
  • 查看网络接口(网卡接口)的情况:
//-i参数:查看网络接口情况,类似ifconfig的功能
LAPTOP-OHBI7I8S% netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500     1416      0      0 0           863      0      0      0 BMRU
lo       65536     9621      0      0 0          9621      0      0      0 LRU

三、tcpdump+wireshark

从底层网络硬件(ifconfig)到上层各种协议(netsat),最后一个层面就是要查看网络中的各种数据包了。这也是tcpdump+wireshark要帮助我们做的事情。

经过前面的介绍我们知道,tcpdump只支持命令行形式,而wireshark是具有GUI界面的抓包工具。

同时,wireshark还可以解析tcpdump抓取的数据包,以界面的形式帮助我们看清楚tcpdump抓取的包。

因此,我们在调试网络程序时,就可以根据自己情况来选择不同的抓包工具:

如果使用只支持命令行的服务器,可以先用tcpdump抓包到.pcap文件,然后到开发机用wireshark打开观察数据包;

如果使用开发机(windows或macos)进行网络编程,那么也可以直接使用wireshark抓包。

1. tcpdump使用

  • tcpdump选项:
  • tcpdump的高级过滤功能:
  • 举例:
//抓取eth0接口相关的,tcp协议的,指定主机和端口号上的包,并将抓到的数据保存在netdata.pcap中
LAPTOP-OHBI7I8S% tcpdump -i eth0 tcp and host 127.0.0.1 and port 50002 -w netdata.pcap
//抓取特定TCP状态的包
LAPTOP-OHBI7I8S% tcpdump -i eth0 "tcp[tcpflags&tcp-syn!=0]" and host 1127.0.0.1 and port 50002

2. wireshark使用

wireshark的使用相对容易一些,可以直接使用它抓取数据包,也可以打开tcpdump获得的.pcap文件,以查看数据包详细信息。以下是上面tcpdump抓取到的数据包在wireshark里的显示:

wireshark中黑色是什么 wireshark黑色的行_linux

可以直观的看到不同来自不同协议的数据包用不同的颜色区分开。仔细观察上图可以清晰的看到TCP建立三次握手的SYN、SYN+ACK、ACK报文段;发送搭载应用层数据的TCP报文段和对应的ACK;浏览器向我的服务器发送的HTTP GET报文;还有黑色的报文丢失警告报文段(其他端口发来)。

双击某一条记录可以查看详细信息,比如点开服务器向浏览器发送数据的TCP报文段:

wireshark中黑色是什么 wireshark黑色的行_tcpdump_02

可以看到TCP头信息和TCP运载的数据,由于没有加密协议,所以可以直接看到应用层的发出的HTTP报文。

总结

本文简要介绍了常见网络工具的基本用法,包括ifconfig, netstat, tcpdump, wireshark。

一定还得在实际项目中熟练运用,发挥这些工具的效用啊!