Linux网络学习笔记-常用网络命令

前言

基础学习基本结束,那就需要在服务器上实战了。

Linux中常用的网络命令

设置网络参数的命令

ifconfig

主要是可以手动启动、查看、修改网络接口的相关参数,可以修改的参数很多,语法如下:

1
2
3
4
5
6
7
8
9
ifconfig {interface} {up|down}    查看和启动接口
ifconfig interface {options} 设置和修改接口

interface:网卡接口的名称例如eth0,ppp0
options:
up,down:启动和关闭该网络接口
mtu:设置不同的mtu数值
netmask:子网掩码
broadcast:广播地址

实际的CentOS直接执行ifconfig命令以后

1
2
3
4
5
6
7
8
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.4.136 netmask 255.255.255.0 broadcast 192.168.4.255
inet6 fe80::225a:5b28:9fb5:7177 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:72:3c:88 txqueuelen 1000 (Ethernet)
RX packets 111939 bytes 105696848 (100.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 36890 bytes 5589961 (5.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  • ens33表示网卡
  • mtu表示最大传输单元
  • inet表示ip地址,inet6表示IPV6下的地址
  • broadcast表示广播地址
  • netmask表示子网掩码
  • ether后面的是MAC地址
  • RX表示数据包接收情况
  • TX表示数据包发送情况
  • txqueuelen表示用来传输数据的缓冲区的存储长度

其他的一些设置如下:

1
2
3
4
ifconfig ens33 129.168.x.x     暂时修改网络接口
ifconfig netmask xxxx
ifconfig mtu xxxx
ifconfig eth0:0 IP 在实体网卡上再仿真一个网络接口,在一张网卡上设置多个IP

ifup,ifdown

实时地手动修改一些网络接口参数,可以利用ifconfig来实现,如果是要直接以配置文件,亦即是在 /etc/sysconfig/network-scripts里面的ifcfg-ethx 等文件的设置参数来启动的话,那就得要通过 ifdown 或 ifup 来实现了。

这两个程序其实是 script 而已,它会直接到 /etc/ sysconfig/network-scripts 目录下搜索对应的配置文件,例如 ifup eth0,它会找出 ifcfg-eth0 这个文件的内容,然后加以设置。

内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="db8f19dd-80c8-4bcc-87b8-f3069dda76ce"
DEVICE="ens33"
ONBOOT="yes"
ZONE=public

如果使用过ifconfig来设置过接口了,那么就不可以再使用ifdown和ifup了,使用完ifconfig以后,需要使用ifconfig up/down

route

两台主机之间一定要有路由才能互通TCP/IP协议,否则就无法连接。一般来说,只要有网络接口,该接口就会产生一个路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
route [-nee]
route add [-net|-host] [网络或者主机] netmask [mask] [gw|dev]
route del [-net|-host] [网络或者主机] netmask [mask] [gw|dev]

-n:不使用主机名和通信协议,直接使用IP和端口号
-ee:显示更详细的信息
-net:后面接的路由为一个网络
-host:后面接的为连接到单部主机的路由
netmask:设置子网掩码
gw:gateway的缩写,后面接IP
dev:后面接网卡

[gard3nia@localhost ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.4.2 0.0.0.0 UG 100 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.4.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33

可以发现-n的效果就是将主机名换为IP地址表示。

  • network和netmask:分别表示网络号和子网掩码
  • Gateway:表示该网络是通过哪个Gateway连接出去的。如果显示0.0.0.0就表示该路由是由本机传送。也就是可以通过局域网的MAC来发送出去。
  • Flags:标志位
    • U:该路由是启动的
    • H:目标是一台主机而非网络
    • G:需要通过外部的主机来传递数据包
    • D:动态路由
    • M:路由已经被修改了
    • R:使用动态路由时,恢复路由信息的标志
    • !:这个路由将不会被接受
  • Iface:这个路由传递数据包的接口

ip

ip命令的功能非常多,综合了ifconfig和route两个命令

1
2
3
4
5
6
7
8
9
ip [option] [动作] [命令]

option:
-s:显示出设备的统计数据,例如接受数据包的多少

动作:
link:与设备相关的设置,包括MTU\MAC等
addr/address:关于额外的IP协议
route:与路由相关的设置

基本上就是修改硬件信息。可以设置与设备有关的参数,包括MTU以及该网络接口的MAC等,也可以开启或者关闭某个网络接口。语法:

1
2
3
4
5
6
7
8
9
10
11
12
ip [-s] link show
ip link set [device]

选项和参数:
show:仅仅显示出这个设备的相关属性
set:可以开始设置项目,device指的是eth0等设备名称

动作和参数:
up|down:启动关闭接口
address:如果可以更改MAC就用这个参数修改
name:给予这个设备一个特殊的名字
mtu:最大传输单元

实际操作:

1
2
3
4
5
6
ip link show 显示本机所有接口信息
ip -s link show eth0
ip link set eth0 up/down
ip link set eth0 mtu 1000
ip link set eth0 name xx
ip link set eth0 address xx:xx:xx:xx

2.关于额外IP的相关设定:ip address

这里的命令修改的是和IP层相关的参数

1
2
3
4
5
6
7
8
9
10
11
ip address show
ip address [add|del] [IP参数] [dev] [参数]

参数:
broadcast:设置广播地址
label:设备的别名,例如eth0:0
scope:
global:允许来自所有来源的连接
site:仅仅支持IPv6
link:仅仅允许本设备自我连接
host:仅仅允许本主机内部的连接

实际操作:

1
2
ip address add 192.168.50.50/24 broadcast + dev eth0 label eht0:xx
ip address del xxxxxx/24 dev xxx

3.关于路由的相关设定:ip route

其实和route的功能差不多:

1
2
3
4
5
ip route [add|del] [IP/网络号] [via gateway] [dev]

via:从哪个gateway出去
dev:从哪个设备连出去(必要)
mtu

这个命令实在是太复杂…

iwlist,iwconfig

设置无线网卡相关数据

dhclient

1
dhclient eth0

这样可以让网卡以DHCP协议去尝试获得IP。

网络排错和查看命令

ping

ping主要通过ICMP数据包来进行整个网络的状态报告,最重要的就是ICMP type0、8这两个类型,分别是要求回送和主动回送网络状态是否存在的特性。

1
2
3
4
5
6
7
8
9
ping [参数] IP
-c 数值:后面接的是执行ping的次数
-n :在输出数据时不进行IP与主机名的反查,直接使用IP输出
-s 数值:发送出去的ICMP数据包的大小,默认为56bytes,不过可以放大
-t 数值:TTL的数值,默认是255,每经过一个节点就会少1
-W 数值:等待响应对方主机的秒数
-M [do|dont]:检测MTU数值的大小
do:代表传送一个DF标志,让数据包不能重新拆包和打包
dont:代表不要传送DF标志,表示数据包可以在其他主机拆包和打包

主要的响应:

1
2
3
4
5
6
7
8
9
10
11
12
[gard3nia@localhost ~]$ ping -c 6 192.168.4.1
PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.
64 bytes from 192.168.4.1: icmp_seq=1 ttl=128 time=0.414 ms
64 bytes from 192.168.4.1: icmp_seq=2 ttl=128 time=0.487 ms
64 bytes from 192.168.4.1: icmp_seq=3 ttl=128 time=0.535 ms
64 bytes from 192.168.4.1: icmp_seq=4 ttl=128 time=0.392 ms
64 bytes from 192.168.4.1: icmp_seq=5 ttl=128 time=0.663 ms
64 bytes from 192.168.4.1: icmp_seq=6 ttl=128 time=0.400 ms

--- 192.168.4.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5073ms
rtt min/avg/max/mdev = 0.392/0.481/0.663/0.099 ms

其中需要解释的几点:

64 bytes:ICMP数据包的大小为64bytes

icmp_seq=1:ICMP检测的次数

ttl=128:和IP数据包内的TTL是相同的,每次经过一个带有MAC节点时,TTL就会减1,默认值为255

time:响应时间

traceroute

主要用于量主机之间的各节点的分析:

1
2
3
4
5
6
7
8
9
traceroute [参数] IP
-n 使用IP来解析
-U 使用UDP的port33434来进行检测
-I 使用ICMP的方式来检测
-T 使用TCP来进行检测
-w 若对方主机在几秒内没有回应就申明不通..默认5s
-p 端口号
-i 设备,表示从哪个网卡接口连接到外部
-g 路由,接的是gateway的IP地址

基本上出现***的情况就是可能有防火墙设备

这个命令会针对欲连接的目标的所有的节点进行UDP的超时等待。如果返回星号就代表该节点可能设有某些防护措施,让我们发送的数据包信息被丢弃掉。因为我们是直接通过路由器来传递数据包,并没有去进入路由器去取得路由器的使用资源,所以某些路由器仅仅支持数据包传递,并不会接受来自客户端的各项检测。

netstat

1
2
3
4
5
6
7
8
9
10
netstat [-rn] 路由相关
netstat [-antulpc] 与网络接口相关
-r 和route功能一样
-n 还是IP表示
-a 列出所有的连接状态
-t TCP
-u UDP
-l 正在listen的服务
-p 列出PID
-c 设置几秒后自动更新

常用:

1
2
netstat -tulnp 显示出目前已经启动的网络服务
netstat -atunp 查看本机上所有的网络连接状态

具体的一些参数的含义:

  • proto:该连接的数据包协议
  • local address:本地端的地址,可以是IP地址,也可以是完整的主机名。使用的格式是IP:port,只是格式分为IPv6和IPv4,其中使用的:::22就是针对IPv6的显示,事实上,就是相当于0.0.0.0:22
  • foreign address:远程主机IP和port
  • stat:状态栏

检测主机名和IP的对应

host

可以用来查询某个主机的IP

1
2
[gard3nia@localhost ~]$ host gardenia30.top
gardenia30.top has address 185.199.109.153

nslookup

其实和host一样

1
2
3
4
5
6
7
[gard3nia@localhost ~]$ nslookup gardenia30.top
Server: 192.168.4.2
Address: 192.168.4.2#53

Non-authoritative answer:
Name: gardenia30.top
Address: 185.199.109.153

远程连接命令和即时通信软件

telnet

1
telnet IP port

可以使用这个命令来测试本地的端口的开启情况

ftp

具体以后会写,先了解一下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
ftp ip port

help
dir
cd
get 下载单一文件
mget 下载多个文件
put 上传文件
delete 删除文件
mkdir
lcd /home 切换到本地主机的/home
passive 启动/关闭passive模式
bye

文字接口网页浏览

称为文字浏览器,常常被用于浏览以HTML语法写成的文件数据。

wget

常常被用于下载数据,只需要提供数据的地址即可:

1
wget url

数据包捕获功能

tcpdump

常常用于数据监听的软件,必须要root身份才能使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tcpdump [-AennqX] [-i 接口] [-w 存储文件名] [-c 次数] 
[-r 文件] [数据包格式]
-A:数据包的格式以ASCII显示
-e:使用数据链路层的MAC数据包显示
-nn:直接以IP和port显示,而非主机名和服务名称
-q:精简列出数据包信息
-X:列出hex以及ASCII的值
-i:后面接需要监听的网卡接口
-w:存取监听的数据包时使用,后面接文件名
-r:从后面接的文件将数据包数据读出来
-c:监听的数据包数目

简化输出结果的方法:
'host xxx':针对单台主机
'net 192.168':针对某个网络
'src host 127.0.0.1' 'dst net 192.168':针对目标和来源
'tcp port 21':针对端口

常用方法:

1
tcpdump -i ens33 -nn port xx '限定条件'

从客户端访问目标主机的80端口,以下为在目标主机上抓取的80端口的数据包,很明显看出了建立TCP三次握手的过程:

1
2
3
4
5
6
7
8
[gard3nia@localhost ~]$ sudo tcpdump -i ens33 -nn port 80
[sudo] password for gard3nia:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
07:00:06.412774 IP 192.168.4.1.34680 > 192.168.4.136.80: Flags [S], seq 3106410145, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
07:00:06.412906 IP 192.168.4.136.80 > 192.168.4.1.34680: Flags [S.], seq 1492200684, ack 3106410146, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
07:00:06.413275 IP 192.168.4.1.34680 > 192.168.4.136.80: Flags [.], ack 1, win 4106, length 0
....省略

nc–netcat

网络命令里的瑞士军刀,这个命令非常重要,在进行内网探测,嗅探还有反弹shell等等操作中都是非常实用的,甚至还可以用来传文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nc [参数] IP port
-g<网关>:设置路由器跃程通信网关,最多设置8个;
-G<指向器数目>:设置来源路由指向器,其数值为4的倍数;
-h:在线帮助;
-i<延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口;
-l:使用监听模式,监控传入的资料;
-n:直接使用ip地址,而不通过域名服务器;
-o<输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p<通信端口>:设置本地主机使用的通信端口;
-r:指定源端口和目的端口都进行随机的选择;
-s<来源位址>:设置本地主机送出数据包的IP地址;
-t: 使用TELNET交互方式
-u:使用UDP传输协议;
-v:显示指令执行过程;
-w<超时秒数>:设置等待连线的时间;
-z:使用0输入/输出模式,只在扫描通信端口时使用

简单的端口扫描:

1
nc -zv ip port

监听自己的一个端口:

1
nc -lvp port

连接其他主机的端口:

1
nc -nv ip port

Refer

1.《鸟哥的Linux私房菜-服务器架设篇》

2.一个挺全面的netcat使用说明:https://www.jianshu.com/p/af6766e428ec

Author: Gard3nia
Link: https://gardenia30.top/2019/11/22/Linux网络学习笔记-常用网络命令/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.