Linux网络工具简介

Posted zkccpro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络工具简介相关的知识,希望对你有一定的参考价值。

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打开观察数据包;

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里的显示:

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

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

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

总结

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

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

以上是关于Linux网络工具简介的主要内容,如果未能解决你的问题,请参考以下文章

Instagram API 权限被拒绝 - 无效用例?

「网易官方」极客战记(codecombat)攻略-网页开发2-边际效用-marginal-utility

基于C++(QT框架)设计的网络摄像头项目(支持跨平台运行)

基于C++(QT框架)设计的网络摄像头项目(支持跨平台运行)

每天学一个 Linux 命令(67):nmap

Linux更改IP和主机名的方法