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里的显示:
可以直观的看到不同来自不同协议的数据包用不同的颜色区分开。仔细观察上图可以清晰的看到TCP建立三次握手的SYN、SYN+ACK、ACK报文段;发送搭载应用层数据的TCP报文段和对应的ACK;浏览器向我的服务器发送的HTTP GET报文;还有黑色的报文丢失警告报文段(其他端口发来)。
双击某一条记录可以查看详细信息,比如点开服务器向浏览器发送数据的TCP报文段:
可以看到TCP头信息和TCP运载的数据,由于没有加密协议,所以可以直接看到应用层的发出的HTTP报文。
总结
本文简要介绍了常见网络工具的基本用法,包括ifconfig, netstat, tcpdump, wireshark。
一定还得在实际项目中熟练运用,发挥这些工具的效用啊!