网络命令
网络配置相关
1.1、ifconfig
配置和显示Linux系统网卡的网络参数
补充说明
ifconfig命令 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
语法
ifconfig
(参数
)
参数
add
<地址
>:设置网络设备
IPv6
的
ip
地址;
del
<地址
>:删除网络设备
IPv6
的
IP
地址;
down
:关闭指定的网络设备;
<hw
<网络设备类型
><硬件地址
>:设置网络设备的类型与硬件地址;
io_addr
<I/O
地址
>:设置网络设备的
I/O
地址;
irq
<IRQ
地址
>:设置网络设备的
IRQ
;
media
<网络媒介类型
>:设置网络设备的媒介类型;
mem_start
<内存地址
>:设置网络设备在主内存所占用的起始地址;
metric
<数目
>:指定在计算数据包的转送次数时,所要加上的数目;
mtu
<字节
>:设置网络设备的
MTU
;
netmask
<子网掩码
>:设置网络设备的子网掩码;
tunnel
<地址
>:建立
IPv4
与
IPv6
之间的隧道通信地址;
up
:启动指定的网络设备;
-broadcast
<地址
>:将要送往指定地址的数据包当成广播数据包来处理;
-pointopoint
<地址
>:与指定地址的网络设备建立直接连线,此模式具有保密功能;
-promisc
:关闭或启动指定网络设备的
promiscuous
模式;
IP
地址:指定网络设备的
IP
地址;
网络设备:指定网络设备的名称。
实例
显示网络设备信息(激活状态的):
[root@localhost ~
]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869
(3.3GiB
)TX bytes:6115042
(5.8MiB
)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451
(4.8MiB
)TX bytes:5079451
(4.8MiB
)
说明:
eth0 表示第一块网卡,其中HWaddr
表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是00:16:3E:00:1E:51
。
inet addr 用来表示网卡的IP地址,此网卡的IP地址是10.160.7.81
,广播地址Bcast:10.160.15.255
,掩码地址Mask:255.255.240.0
。
lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。
- 第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)。
- 第二行:网卡的IP地址、子网、掩码。
- 第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节。
- 第四、五行:接收、发送数据包情况统计。
- 第七行:接收、发送数据字节数统计信息。
启动关闭指定网卡:
ifconfig eth0 up
ifconfig eth0 down
ifconfig eth0 up
为启动网卡eth0,ifconfig eth0 down
为关闭网卡eth0。ssh登陆linux服务器操作要小心,关闭了就不能开启了,除非你有多网卡。
为网卡配置和删除IPv6地址:
ifconfigeth0
add33ffe:3240:800:1005::2/64
#为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64
#为网卡eth0删除IPv6地址
用ifconfig修改MAC地址:
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
配置IP地址:
[root@localhost ~
]# ifconfig eth0 192.168.2.10
[root@localhost ~
]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~
]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
启用和关闭arp协议:
ifconfigeth0 arp
#开启网卡eth0 的arp协议
ifconfig eth0 -arp
#关闭网卡eth0 的arp协议
设置最大传输单元:
ifconfigeth0 mtu
1500#设置能通过的最大数据包大小为 1500 bytes
其它实例
ifconfig#处于激活状态的网络接口
ifconfig-a
#所有配置的网络接口,不论其是否激活
ifconfig eth0
#显示eth0的网卡信息
1.2、ip
网络配置工具
补充说明
ip命令 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
语法
ip
(选项
)(参数
)
Usage:
ip[
OPTIONS
]OBJECT
{COMMAND
|help
}
ip
[
-force
]-batch filename
选项
OBJECT :
={
link
|
address
|addrlabel
|route
|rule
|neigh
|ntable
|
tunnel
|tuntap
|maddress
|mroute
|mrule
|monitor
|xfrm
|
netns
|l2tp
|macsec
|tcp_metrics
|token
}
-V
:显示指令版本信息;
-s
:输出更详细的信息;
-f
:强制使用指定的协议族;
-4
:指定使用的网络层协议是IPv4协议;
-6
:指定使用的网络层协议是IPv6协议;
-0
:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r
:显示主机时,不使用IP地址,而使用主机的域名。
参数
OPTIONS :
={
-V
[ersion
]|
-s
[tatistics
]|
-d
[etails
]|
-r
[esolve
]|
-h
[uman-readable
]|
-iec
|
-f
[amily
]{
inet
|inet6
|ipx
|dnet
|bridge
|link
}
|
-4
|-6
|-I
|-D
|-B
|-0
|
-l
[oops
]{
maximum-addr-flush-attempts
}|
-o
[neline
]|
-t
[imestamp
]|
-ts
[hort
]|
-b
[atch
][
filename
]|
-rc
[vbuf
][
size
]|
-n
[etns
]name
|-a
[ll
]}
网络对象:指定要管理的网络对象;
具体操作:对指定的网络对象完成具体操作;
help
:显示网络对象支持的操作命令的帮助信息。
实例
ip link show #
显示网络接口信息
ip link set eth0 up #
开启网卡
ip link set eth0 down #
关闭网卡
ip link set eth0 promisc on #
开启网卡的混合模式
ip link set eth0 promisc offi #
关闭网卡的混个模式
ip link set eth0 txqueuelen
1200#
设置网卡队列长度
ip link set eth0 mtu
1400#
设置网卡最大传输单元
ip addr show #
显示网卡IP信息
ip addr add
192.168.0.1/24dev eth0 #
设置eth0网卡IP地址
192.168.0.1
ip addr del
192.168.0.1/24dev eth0 #
删除eth0网卡IP地址
ip route show #
显示系统路由
ip route add
defaultvia
192.168.1.254#
设置系统默认路由
ip route list #
查看路由信息
ip route add
192.168.4.0/24via
192.168.0.254dev eth0 #
设置
192.168.4.0网段的网关为
192.168.0.254,数据走eth0接口
ip route add
defaultvia
192.168.0.254dev eth0 #
设置默认网关为
192.168.0.254
ip route del
192.168.4.0/24#
删除
192.168.4.0网段的网关
ip route del
default#
删除默认路由
ip route delete
192.168.1.0/24dev eth0 #
删除路由
用ip命令显示网络设备的运行状态
[root@localhost ~
]# ip link list
1: lo:
<LOOPBACK,UP,LOWER_UP
>mtu
16436qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:
<BROADCAST,MULTICAST,UP,LOWER_UP
>mtu
1500qdisc pfifo_fast qlen
1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
3: eth1:
<BROADCAST,MULTICAST,UP,LOWER_UP
>mtu
1500qdisc pfifo_fast qlen
1000
link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
显示更加详细的设备信息
[root@localhost ~
]# ip -s link list
1: lo:
<LOOPBACK,UP,LOWER_UP
>mtu
16436qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
5082831
56145
0
0
0
0
TX: bytes packets errors dropped carrier collsns
5082831
56145
0
0
0
0
2: eth0:
<BROADCAST,MULTICAST,UP,LOWER_UP
>mtu
1500qdisc pfifo_fast qlen
1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
3641655380
62027099
0
0
0
0
TX: bytes packets errors dropped carrier collsns
6155236
89160
0
0
0
0
3: eth1:
<BROADCAST,MULTICAST,UP,LOWER_UP
>mtu
1500qdisc pfifo_fast qlen
1000
link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
2562136822
488237847
0
0
0
0
TX: bytes packets errors dropped carrier collsns
3486617396
9691081
0
0
0
0
显示核心路由表
[root@localhost ~
]# ip route list
112.124.12.0/22 dev eth1 proto kernel scope
linksrc
112.124.15.130
10.160.0.0/20 dev eth0 proto kernel scope
linksrc
10.160.7.81
192.168.0.0/16 via
10.160.15.247 dev eth0
172.16.0.0/12 via
10.160.15.247 dev eth0
10.0.0.0/8 via
10.160.15.247 dev eth0
default via
112.124.15.247 dev eth1
显示邻居表
[root@localhost ~
]# ip neigh list
112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE
10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE
获取主机所有网络接口
iplink
|
grep
-E
'^[0-9]'|
awk
-F:
'{print $2}'
路由相关
2.1、route
显示并设置Linux中静态路由表
补充说明
route命令 用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local
中添加route命令来保证该路由设置永久有效。
语法
route
(选项
)(参数
)
选项
-A
:设置地址类型;
-C
:打印将
Linux
核心的路由缓存;
-v
:详细信息模式;
-n
:不执行
DNS
反向查找,直接显示数字形式的
IP
地址;
-e
:
netstat
格式显示路由表;
-net
:到一个网络的路由表;
-host
:到一个主机的路由表。
参数
Add
:增加指定的路由记录;
Del
:删除指定的路由记录;
Target
:目的网络或目的主机;
gw
:设置默认网关;
mss
:设置
TCP
的最大区块长度(
MSS
),单位
MB
;
window
:指定通过路由表的
TCP
连接的
TCP
窗口大小;
dev
:路由记录所表示的网络接口。
实例
显示当前路由:
[root@localhost ~
]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0 *
255.255.252.0 U
00
0
eth1
10.160.0.0 *
255.255.240.0 U
00
0
eth0
192.168.0.0
10.160.15.247
255.255.0.0 UG
00
0
eth0
172.16.0.0
10.160.15.247
255.240.0.0 UG
00
0
eth0
10.0.0.0
10.160.15.247
255.0.0.0 UG
00
0
eth0
default
112.124.15.247
0.0.0.0 UG
00
0
eth1
[root@localhost ~
]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0
0.0.0.0
255.255.252.0 U
00
0
eth1
10.160.0.0
0.0.0.0
255.255.240.0 U
00
0
eth0
192.168.0.0
10.160.15.247
255.255.0.0 UG
00
0
eth0
172.16.0.0
10.160.15.247
255.240.0.0 UG
00
0
eth0
10.0.0.0
10.160.15.247
255.0.0.0 UG
00
0
eth0
0.0.0.0
112.124.15.247
0.0.0.0 UG
00
0
eth1
其中Flags为路由标志,标记当前网络节点的状态,Flags标志说明:
- U Up表示此路由当前为启动状态。
- H Host,表示此网关为一主机。
- G Gateway,表示此网关为一路由器。
- R Reinstate Route,使用动态路由重新初始化的路由。
- D Dynamically,此路由是动态性地写入。
- M Modified,此路由是由路由守护程序或导向器动态修改。
- ! 表示此路由当前为关闭状态。
添加网关/设置网关:
route
add-net
224.0.0.0 netmask
240.0.0.0 dev eth0
#增加一条到达244.0.0.0的路由。
屏蔽一条路由:
route
add-net
224.0.0.0 netmask
240.0.0.0 reject
#增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。
删除路由记录:
route del -net
224.0.0.0 netmask
240.0.0.0
route del -net
224.0.0.0 netmask
240.0.0.0 reject
删除和添加设置默认网关:
route del default gw
192.168.120.240
route
adddefault gw
192.168.120.240
查看端口工具
3.1、netstat
查看Linux中网络系统状态信息
补充说明
netstat命令 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
语法
netstat
(选项
)
选项
-a
或
--all
:显示所有连线中的
Socket
;
-A
<网络类型
>或
--
<网络类型
>:列出该网络类型连线中的相关地址;
-c
或
--continuous
:持续列出网络状态;
-C
或
--cache
:显示路由器配置的快取信息;
-e
或
--extend
:显示网络其他相关信息;
-F
或
--fib
:显示
FIB
;
-g
或
--groups
:显示多重广播功能群组组员名单;
-h
或
--help
:在线帮助;
-i
或
--interfaces
:显示网络界面信息表单;
-l
或
--listening
:显示监控中的服务器的
Socket
;
-M
或
--masquerade
:显示伪装的网络连线;
-n
或
--numeric
:直接使用
ip
地址,而不通过域名服务器;
-N
或
--netlink
或
--symbolic
:显示网络硬件外围设备的符号连接名称;
-o
或
--timers
:显示计时器;
-p
或
--programs
:显示正在使用
Socket
的程序识别码和程序名称;
-r
或
--route
:显示
Routing Table
;
-s
或
--statistice
:显示网络工作信息统计表;
-t
或
--tcp
:显示
TCP
传输协议的连线状况;
-u
或
--udp
:显示
UDP
传输协议的连线状况;
-v
或
--verbose
:显示指令执行过程;
-V
或
--version
:显示版本信息;
-w
或
--raw
:显示
RAW
传输协议的连线状况;
-x
或
--unix
:此参数的效果和指定
"-A unix"参数相同;
--ip
或
--inet
:此参数的效果和指定
"-A inet"参数相同。
实例
列出所有端口 (包括监听和未监听的)
netstat-a
#列出所有端口
netstat-at
#列出所有tcp端口
netstat -au
#列出所有udp端口
列出所有处于监听状态的 Sockets
netstat-l
#只显示监听端口
netstat-lt
#只列出所有监听 tcp 端口
netstat-lu
#只列出所有监听 udp 端口
netstat -lx
#只列出所有监听 UNIX 端口
显示每个协议的统计信息
netstat-s
显示所有端口的统计信息
netstat-st
显示
TCP
端口的统计信息
netstat-su
显示
UDP
端口的统计信息
``
`shell
**在netstat输出中显示 PID 和进程名称**
```shell
netstat -pt
netstat -p
可以与其它开关一起使用,就可以添加“PID/进程名称”到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。
在netstat输出中不显示主机,端口和用户名(host, port or user)
当你不想让主机,端口和用户名显示,使用netstat -n
。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。
netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令:
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users
持续输出netstat信息
netstat -c
#每隔一秒输出网络信息
显示系统不支持的地址族(Address Families)
netstat --verbose
在输出的末尾,会有如下的信息:
netstat: no support
for`AF IPX' on this system.
netstat: no support for `AF AX25
' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.
显示核心路由信息
netstat -r
使用netstat -rn
显示数字格式,不查询主机名称。
找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
netstat-ap
|grep
ssh
找出运行在指定端口的进程:
netstat-an
|grep
':80'
通过端口找进程ID
netstat
-anp
|grep
8081|
grep LISTEN
|awk
'{printf $7}'|cut
-d
/-
f1
显示网络接口列表
netstat -i
显示详细信息,像是ifconfig使用netstat -ie
。
IP和TCP分析
查看连接某服务端口最多的的IP地址:
netstat-ntu
|grep
:80
|awk
'{print $5}'
|
cut
-d: -f1
|awk
'{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}'
|
sort
-nr
TCP各种状态列表:
netstat-nt
|grep
-e
127.0.0.1 -e
0.0.0.0 -e ::: -v
|awk
'/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
查看phpcgi进程数,如果接近预设值,说明不够用,需要增加:
netstat-anpo
|grep
"php-cgi"
|
wc
-l
3.2、ss
比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息
补充说明
ss命令 用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp
,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
语法
ss
[参数
]
ss
[参数
][
过滤
]
选项
-h, --help
帮助信息
-V, --version
程序版本信息
-n, --numeric
不解析服务名称
-r, --resolve
解析主机名
-a, --all
显示所有套接字(
sockets
)
-l, --listening
显示监听状态的套接字(
sockets
)
-o, --options
显示计时器信息
-e, --extended
显示详细的套接字(
sockets
)信息
-m, --memory
显示套接字(
socket
)的内存使用情况
-p, --processes
显示使用套接字(
socket
)的进程
-i, --info
显示
TCP
内部信息
-s, --summary
显示套接字(
socket
)使用概况
-4, --ipv4
仅显示
IPv4
的套接字(
sockets
)
-6, --ipv6
仅显示
IPv6
的套接字(
sockets
)
-0, --packet
显示
PACKET
套接字(
socket
)
-t, --tcp
仅显示
TCP
套接字(
sockets
)
-u, --udp
仅显示
UCP
套接字(
sockets
)
-d, --dccp
仅显示
DCCP
套接字(
sockets
)
-w, --raw
仅显示
RAW
套接字(
sockets
)
-x, --unix
仅显示
Unix
套接字(
sockets
)
-f, --family
=FAMILY
显示
FAMILY
类型的套接字(
sockets
),
FAMILY
可选,支持
unix, inet, inet6, link, netlink
-A, --query
=QUERY, --socket
=QUERY
QUERY :
={
all
|inet
|tcp
|udp
|raw
|unix
|packet
|netlink
}[,QUERY
]
-D, --diag
=FILE
将原始
TCP
套接字(
sockets
)信息转储到文件
-F, --filter
=FILE
从文件中都去过滤器信息
FILTER :
=[
state TCP-STATE
][
EXPRESSION
]
实例
ss -t -a
# 显示TCP连接
ss -s
# 显示 Sockets 摘要
ss -l
# 列出所有打开的网络连接端口
ss -pl
# 查看进程使用的socket
ss -lp
|grep
3306
# 找出打开套接字/端口应用程序
ss -u -a
显示所有
UDP Sockets
ss -o state established
'( dport = :smtp or sport = :smtp )'# 显示所有状态为established的SMTP连接
ss -o state established
'( dport = :http or sport = :http )'# 显示所有状态为Established的HTTP连接
ss -o state fin-wait-1
'( sport = :http or sport = :https )'dst
193.233.7/24
# 列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
# ss 和 netstat 效率对比
timenetstat
-at
time ss
# 匹配远程地址和端口号
# ss dst ADDRESS_PATTERN
ss dst
192.168.1.5
ss dst
192.168.119.113:http
ss dst
192.168.119.113:smtp
ss dst
192.168.119.113:443
# 匹配本地地址和端口号
# ss src ADDRESS_PATTERN
ss src
192.168.119.103
ss src
192.168.119.103:http
ss src
192.168.119.103:80
ss src
192.168.119.103:smtp
ss src
192.168.119.103:25
将本地或者远程端口和一个数比较
# ss dport OP PORT 远程端口和一个数比较;
# ss sport OP PORT 本地端口和一个数比较
# OP 可以代表以下任意一个:
# <= or le : 小于或等于端口号
# >= or ge : 大于或等于端口号
# == or eq : 等于端口号
# != or ne : 不等于端口号
# < or gt : 小于端口号
# > or lt : 大于端口号
ss sport
=:http
ss dport
=:http
ss dport
\>:1024
ss sport
\>:1024
ss sport
\<:32000
ss sport eq :22
ss dport
!=:22
ss state connected sport
=:http
ss
\(sport
=:http or sport
=:https
\)
ss -o state fin-wait-1
\(sport
=:http or sport
=:https
\)dst
192.168.1/24
用TCP 状态过滤Sockets
ss -4 state closing
# ss -4 state FILTER-NAME-HERE
# ss -6 state FILTER-NAME-HERE
# FILTER-NAME-HERE 可以代表以下任何一个:
# established、 syn-sent、 syn-recv、 fin-wait-1、 fin-wait-2、 time-wait、 closed、 close-wait、 last-ack、 listen、 closing、
# all : 所有以上状态
# connected : 除了listen and closed的所有状态
# synchronized :所有已连接的状态除了syn-sent
# bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.
# big : 和bucket相反.
显示ICP连接
[root@localhost ~
]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN
00
*:3306 *:*
LISTEN
00
*:http *:*
LISTEN
00
*:ssh *:*
LISTEN
00
127.0
.0.1:smtp *:*
ESTAB
00
112.124
.15.130:42071
42.156.166.25:http
ESTAB
00
112.124
.15.130:ssh
121.229.196.235:33398
显示 Sockets 摘要
[root@localhost ~
]# ss -s
Total:
172(
kernel
189)
TCP:
10(
estab
2, closed
4, orphaned
0, synrecv
0, timewait
0/0
), ports
5
Transport Total
ipIPv6
*
189- -
RAW
00
0
UDP
55
0
TCP
66
0
INET
1111
0
FRAG
00
0
列出当前的established, closed, orphaned and waiting TCP sockets
列出所有打开的网络连接端口
[root@localhost ~
]# ss -l
Recv-Q Send-Q Local Address:Port Peer Address:Port
00
*:3306 *:*
00
*:http *:*
00
*:ssh *:*
00
127.0
.0.1:smtp *:*
查看进程使用的socket
[root@localhost ~
]# ss -pl
Recv-Q Send-Q Local Address:Port Peer Address:Port
00
*:3306 *:* users:
(("mysqld",1718,10))
00
*:http *:* users:
(("nginx",13312,5),("nginx",13333,5))
00
*:ssh *:* users:
(("sshd",1379,3))
00
127.0
.0.1:smtp *:* us
找出打开套接字/端口应用程序
[root@localhost ~
]# ss -pl | grep 3306
00
*:3306 *:* users:
(("mysqld",1718,10))
显示所有UDP Sockets
[root@localhost ~
]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN
00
*:syslog *:*
UNCONN
00
112.124
.15.130:ntp *:*
UNCONN
00
10.160
.7.81:ntp *:*
UNCONN
00
127.0
.0.1:ntp *:*
UNCONN
00
*:ntp *:*
出所有端口为 22(ssh)的连接
ss state all sport
=:ssh
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN
0128
*:ssh *:*
tcp ESTAB
00
192.168
.0.136:ssh
192.168.0.102:46540
tcp LISTEN
0128
:::ssh :::*
nc
用于设置路由器,是网络工具中的瑞士军刀
补充说明
nc命令 全称netcat,用于设置路由器。它能通过 TCP 和 UDP 在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用 netcat 命令所能完成的事情令人惊讶。
语法
nc[
-hlnruz
][-g
<网关
...
>][-G
<指向器数目
>][-i
<延迟秒数
>][-o
<输出文件
>][-p
<通信端口
>]
[-s
<来源位址
>][-v
...
][-w
<超时秒数
>][主机名称
][通信端口
...
]
选项
-g
<网关
>
设置路由器跃程通信网关,最多可设置
8
个。
-G
<指向器数目
>
设置来源路由指向器,其数值为
4
的倍数。
-h
在线帮助。
-i
<延迟秒数
>
设置时间间隔,以便传送信息及扫描通信端口。
-l
使用监听模式,管控传入的资料。
-n
直接使用
IP
地址,而不通过域名服务器。
-o
<输出文件
>
指定文件名称,把往来传输的数据以
16
进制字码倾倒成该文件保存。
-p
<通信端口
>
设置本地主机使用的通信端口。
-r
乱数指定本地与远端主机的通信端口。
-s
<来源位址
>
设置本地主机送出数据包的
IP
地址。
-u
使用
UDP
传输协议。
-v
显示指令执行过程。
-w
<超时秒数
>
设置等待连线的时间。
-z
使用
0
输入
/
输出模式,只在扫描通信端口时使用。
实例
TCP端口扫描
[root@localhost ~
]# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse
hostlookup failed: Unknown
host
(UNKNOWN
)[192.168
.0.3
]80
(
http
)open
(UNKNOWN
)[192.168
.0.3
]23
(
telnet
)open
(UNKNOWN
)[192.168
.0.3
]22
(
ssh
)open
扫描192.168.0.3 的端口 范围是 1-100 扫描UDP端口
[root@localhost ~
]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
扫描指定端口
[root@localhost ~
]# nc -nvv 192.168.0.1 80 # 扫描 80端口
(UNKNOWN
)[192.168
.0.1
]80
(
?
)open
y //
用户输入
查看从服务器到目的地的出站端口 443 是否被防火墙阻止
nc
-vz acme
-v02
.api
.letsencrypt
.org
443-
w2
# Ncat: Version 7.50 ( https://nmap.org/ncat )
# Ncat: Connected to 23.77.214.183:443.
# Ncat: 0 bytes sent, 0 bytes received in 0.07 seconds.
telnet
登录远程主机和管理(测试ip端口是否连通)
补充说明
telnet命令 用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。
语法
telnet
(选项
)(参数
)
选项
-8
:允许使用
8
位字符资料,包括输入与输出;
-a
:尝试自动登入远端系统;
-b
<主机别名
>:使用别名指定远端主机名称;
-c
:不读取用户专属目录里的
.telnetrc
文件;
-d
:启动排错模式;
-e
<脱离字符
>:设置脱离字符;
-E
:滤除脱离字符;
-f
:此参数的效果和指定
"-F"参数相同;
-F
:使用
Kerberos V5
认证时,加上此参数可把本地主机的认证数据上传到远端主机;
-k
<域名
>:使用
Kerberos
认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名;
-K
:不自动登入远端主机;
-l
<用户名称
>:指定要登入远端主机的用户名称;
-L
:允许输出
8
位字符资料;
-n
<记录文件
>:指定文件记录相关信息;
-r
:使用类似
rlogin
指令的用户界面;
-S
<服务类型
>:设置
telnet
连线所需的
ip TOS
信息;
-x
:假设主机有支持数据加密的功能,就使用它;
-X
<认证形态
>:关闭指定的认证形态。
参数
- 远程主机:指定要登录进行管理的远程主机;
- 端口:指定TELNET协议使用的端口号。
实例
$ telnet
192.168.2.10
Trying
192.168.2.10
...
Connected to
192.168.2.10
(192.168.2.10
).
Escape character is
'^]'.
localhost
(Linux release
2.6.18-274.18.1.el5
#1 SMP Thu Feb 9 12:45:44 EST 2012) (1)
login: root
Password:
Login incorrect
一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su -切到root用户。
$ telnet
192.168.188.132
Trying
192.168.188.132
...
telnet: connect to address
192.168.188.132: Connection refused
telnet: Unable to connect to remote
host
处理这种情况方法:
- 确认ip地址是否正确?
- 确认ip地址对应的主机是否已经开机?
- 如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看)
- 如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行)
- 如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看)
启动telnet服务
service xinetd restart
配置参数,通常的配置如下:
service telnet
{
disable
=no
#启用
flags
=REUSE
#socket可重用
socket_type
=stream
#连接方式为TCP
wait
=
no
#为每个请求启动一个进程
user
=root
#启动服务的用户为root
server
=/usr/sbin/in.telnetd
#要激活的进程
log_on_failure
+=USERID
#登录失败时记录登录用户名
}
如果要配置允许登录的客户端列表,加入
only_from
=192.168
.0.2
#只允许192.168.0.2登录
如果要配置禁止登录的客户端列表,加入
no_access
=192.168
.0.
{2,3,4
}#禁止192.168.0.2、192.168.0.3、192.168.0.4登录
如果要设置开放时段,加入
access_times
=9
:00-12:00
13:00-17:00
# 每天只有这两个时段开放服务(我们的上班时间:P)
如果你有两个IP地址,一个是私网的IP地址如192.168.0.2,一个是公网的IP地址如218.75.74.83,如果你希望用户只能从私网来登录telnet服务,那么加入
bind=
192.168
.0.2
各配置项具体的含义和语法可参考xined配置文件属性说明(man xinetd.conf)
配置端口,修改services文件:
# vi /etc/services
找到以下两句
telnet
23/tcp
telnet
23/udp
如果前面有#字符,就去掉它。telnet的默认端口是23,这个端口也是黑客端口扫描的主要对象,因此最好将这个端口修改掉,修改的方法很简单,就是将23这个数字修改掉,改成大一点的数字,比如61123。注意,1024以下的端口号是internet保留的端口号,因此最好不要用,还应该注意不要与其它服务的端口冲突。
启动服务:
service xinetd restart
下载工具
curl
利用URL规则在命令行下工作的文件传输工具
补充说明
curl命令 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
语法
curl
(选项
)(参数
)
选项
-a/--append |
上传文件时,附加到目标文件 |
-A/--user-agent |
设置用户代理发送给服务器 |
-anyauth |
可以使用“任何”身份验证方法 |
-b/--cookie |
cookie字符串或文件读取位置 |
--basic |
使用HTTP基本验证 |
-B/--use-ascii |
使用ASCII /文本传输 |
-c/--cookie-jar |
操作结束后把cookie写入到这个文件中 |
-C/--continue-at |
断点续传 |
-d/--data |
HTTP POST方式传送数据 |
--data-ascii |
以ascii的方式post数据 |
--data-binary |
以二进制的方式post数据 |
--negotiate |
使用HTTP身份验证 |
--digest |
使用数字身份验证 |
--disable-eprt |
禁止使用EPRT或LPRT |
--disable-epsv |
禁止使用EPSV |
-D/--dump-header |
把header信息写入到该文件中 |
--egd-file |
为随机数据(SSL)设置EGD socket路径 |
--tcp-nodelay |
使用TCP_NODELAY选项 |
-e/--referer |
来源网址 |
-E/--cert |
客户端证书文件和密码 (SSL) |
--cert-type |
证书文件类型 (DER/PEM/ENG) (SSL) |
--key |
私钥文件名 (SSL) |
--key-type |
私钥文件类型 (DER/PEM/ENG) (SSL) |
--pass |
私钥密码 (SSL) |
--engine |
加密引擎使用 (SSL). "--engine list" for list |
--cacert |
CA证书 (SSL) |
--capath |
CA目录 (made using c_rehash) to verify peer against (SSL) |
--ciphers |
SSL密码 |
--compressed |
要求返回是压缩的形势 (using deflate or gzip) |
--connect-timeout |
设置最大请求时间 |
--create-dirs |
建立本地目录的目录层次结构 |
--crlf |
上传是把LF转变成CRLF |
-f/--fail |
连接失败时不显示http错误 |
--ftp-create-dirs |
如果远程目录不存在,创建远程目录 |
--ftp-method [multicwd/nocwd/singlecwd] |
控制CWD的使用 |
--ftp-pasv |
使用 PASV/EPSV 代替端口 |
--ftp-skip-pasv-ip |
使用PASV的时候,忽略该IP地址 |
--ftp-ssl |
尝试用 SSL/TLS 来进行ftp数据传输 |
--ftp-ssl-reqd |
要求用 SSL/TLS 来进行ftp数据传输 |
-F/--form |
模拟http表单提交数据 |
--form-string |
模拟http表单提交数据 |
-g/--globoff |
禁用网址序列和范围使用{}和[] |
-G/--get |
以get的方式来发送数据 |
-H/--header |
自定义头信息传递给服务器 |
--ignore-content-length |
忽略的HTTP头信息的长度 |
-i/--include |
输出时包括protocol头信息 |
-I/--head |
只显示请求头信息 |
-j/--junk-session-cookies |
读取文件进忽略session cookie |
--interface |
使用指定网络接口/地址 |
--krb4 |
使用指定安全级别的krb4 |
-k/--insecure |
允许不使用证书到SSL站点 |
-K/--config |
指定的配置文件读取 |
-l/--list-only |
列出ftp目录下的文件名称 |
--limit-rate |
设置传输速度 |
--local-port |
强制使用本地端口号 |
-m/--max-time |
设置最大传输时间 |
--max-redirs |
设置最大读取的目录数 |
--max-filesize |
设置最大下载的文件总量 |
-M/--manual |
显示全手动 |
-n/--netrc |
从netrc文件中读取用户名和密码 |
--netrc-optional |
使用 .netrc 或者 URL来覆盖-n |
--ntlm |
使用 HTTP NTLM 身份验证 |
-N/--no-buffer |
禁用缓冲输出 |
-o/--output |
把输出写到该文件中 |
-O/--remote-name |
把输出写到该文件中,保留远程文件的文件名 |
-p/--proxytunnel |
使用HTTP代理 |
--proxy-anyauth |
选择任一代理身份验证方法 |
--proxy-basic |
在代理上使用基本身份验证 |
--proxy-digest |
在代理上使用数字身份验证 |
--proxy-ntlm |
在代理上使用ntlm身份验证 |
-P/--ftp-port |
使用端口地址,而不是使用PASV |
-q |
作为第一个参数,关闭 .curlrc |
-Q/--quote |
文件传输前,发送命令到服务器 |
-r/--range |
检索来自HTTP/1.1或FTP服务器字节范围 |
--range-file |
读取(SSL)的随机文件 |
-R/--remote-time |
在本地生成文件时,保留远程文件时间 |
--retry |
传输出现问题时,重试的次数 |
--retry-delay |
传输出现问题时,设置重试间隔时间 |
--retry-max-time |
传输出现问题时,设置最大重试时间 |
-s/--silent |
静默模式。不输出任何东西 |
-S/--show-error |
显示错误 |
--socks4 |
用socks4代理给定主机和端口 |
--socks5 |
用socks5代理给定主机和端口 |
--stderr |
|
-t/--telnet-option |
Telnet选项设置 |
--trace |
对指定文件进行debug |
--trace-ascii |
Like --跟踪但没有hex输出 |
--trace-time |
跟踪/详细输出时,添加时间戳 |
-T/--upload-file |
上传文件 |
--url |
Spet URL to work with |
-u/--user |
设置服务器的用户和密码 |
-U/--proxy-user |
设置代理用户名和密码 |
-w/--write-out [format] |
什么输出完成后 |
-x/--proxy |
在给定的端口上使用HTTP代理 |
-X/--request |
指定什么命令 |
-y/--speed-time |
放弃限速所要的时间,默认为30 |
-Y/--speed-limit |
停止传输速度的限制,速度时间 |
实例
文件下载
curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。如果系统没有curl可以使用yum install curl
安装,也可以下载安装。curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用--silent
选项。
curl URL --silent
这条命令是将下载文件输出到终端,所有下载的数据都被写入到stdout。
使用选项-O
将下载的数据写入到文件,必须使用文件的绝对地址:
curl http://example.com/text.iso --silent -O
选项-o
将下载数据写入到指定名称的文件中,并使用--progress
显示进度条:
curl http://example.com/test.iso -o filename.iso --progress
######################################### 100.0%
不输出错误和进度信息
-s
参数将不输出错误和进度信息。
curl -s https://www.example.com
# 上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。
如果想让 curl 不产生任何输出,可以使用下面的命令。
curl -s -o /dev/null https://google.com
断点续传
curl能够从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件:
curlURL/File -C
偏移量
#偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -:
curl -C -URL
使用curl设置参照页字符串
参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。
使用--referer
选项指定参照页字符串:
curl --referer http://www.google.com http://wangchujiang.com
用curl设置用户代理字符串
有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用--user-agent
或者-A
选项:
curlURL --user-agent
"Mozilla/5.0"
curl URL -A
"Mozilla/5.0"
其他HTTP头部信息也可以使用curl来发送,使用-H
"头部信息" 传递多个头部信息,例如:
curl-H
"Host:wangchujiang.com"-H
"accept-language:zh-cn"URL
curl的带宽控制和下载配额
使用--limit-rate
限制curl的下载速度:
curl URL --limit-rate 50k
命令中用k(千字节)和m(兆字节)指定下载速度限制。
使用--max-filesize
指定可下载的最大文件大小:
curl URL --max-filesize bytes
如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。
curl --limit-rate 200k https://example.com
# 上面命令将带宽限制在每秒 200K 字节。
用curl进行认证
使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码:
curl -u user:pwd http://wangchujiang.com
curl -u user http://wangchujiang.com
只打印响应头部信息
通过-I
或者-head
可以只打印出HTTP头部信息:
[root@localhost text
]# curl -I http://wangchujiang.com
HTTP/1.1
200OK
Server: nginx/1.2.5
date: Mon,
10Dec
201209:24:34 GMT
Content-Type: text/html
;charset=
UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Pingback: http://wangchujiang.com/xmlrpc.php
get请求
curl"http://www.wangchujiang.com"
# 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl-i
"http://www.wangchujiang.com"# 显示全部信息
curl-l
"http://www.wangchujiang.com"# 只显示头部信息
curl-v
"http://www.wangchujiang.com"# 显示get请求全过程解析
post请求
$
curl-d
"param1=value1¶m2=value2""http://www.wangchujiang.com/login"
curl-d
'login=emma&password=123'-X POST https://wangchujiang.com/login
# 或者
$
curl-d
'login=emma'-d
'password=123'-X POST https://wangchujiang.com/login
--data-urlencode
参数等同于 -d
,发送 POST
请求的数据体,区别在于会自动将发送的数据进行 URL
编码。
curl--data-urlencode
'comment=hello world'https://wangchujiang.com/login
# 上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。
读取本地文本文件的数据,向服务器发送
curl-d
'@data.txt'https://wangchujiang.com/upload
# 读取data.txt文件的内容,作为数据体向服务器发送。
json格式的post请求
curl-l -H
"Content-type: application/json"-X POST -d
'{"phone":"13521389587","password":"test"}'http://wangchujiang.com/apis/users.json
向服务器发送 Cookie
使用--cookie "COKKIES"
选项来指定cookie,多个cookie使用分号分隔:
curl http://wangchujiang.com --cookie
"user=root;pass=123456"
将cookie另存为一个文件,使用--cookie-jar
选项:
curl URL --cookie-jar cookie_file
-b
参数用来向服务器发送 Cookie。
curl-b
'foo=bar'https://taobao.com
# 上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。
curl-b
'foo1=bar'-b
'foo2=baz'https://taobao.com
# 上面命令发送两个 Cookie。
```shell
curl -b cookies.txt https://www.taobao.com
# 上面命令读取本地文件 cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。
Cookie 写入一个文件
curl -c cookies.txt https://www.taobao.com
# 上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt。
请求的来源
-e
参数用来设置 HTTP
的标头 Referer
,表示请求的来源。
curl-e
'https://taobao.com?q=example'https://www.example.com
# 上面命令将Referer标头设为 https://taobao.com?q=example。
-H
参数可以通过直接添加标头 Referer
,达到同样效果。
curl-H
'Referer: https://taobao.com?q=example'https://www.example.com
上传二进制文件
-F
参数用来向服务器上传二进制文件。
curl-F
'file=@photo.png'https://taobao.com/profile
# 上面命令会给 HTTP 请求加上标头 Content-Type: multipart/form-data ,然后将文件photo.png作为file字段上传。
-F
参数可以指定 MIME
类型。
curl-F
'file=@photo.png;type=image/png'https://taobao.com/profile
# 上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为 application/octet-stream。
-F
参数也可以指定文件名。
curl-F
'file=@photo.png;filename=me.png'https://taobao.com/profile
# 上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png。
设置请求头
-H
参数添加 HTTP
请求的标头。
curl-H
'Accept-Language: en-US'https://google.com
# 上面命令添加 HTTP 标头 Accept-Language: en-US。
curl-H
'Accept-Language: en-US'-H
'Secret-Message: xyzzy'https://google.com
# 上面命令添加两个 HTTP 标头。
curl-d
'{"login": "emma", "pass": "123"}'-H
'Content-Type: application/json'https://google.com/login
# 上面命令添加 HTTP 请求的标头是 Content-Type: application/json,然后用 -d 参数发送 JSON 数据。
跳过 SSL 检测
curl -k https://www.example.com
# 上面命令不会检查服务器的 SSL 证书是否正确。
请求跟随服务器的重定向
-L
参数会让 HTTP
请求跟随服务器的重定向。curl
默认不跟随重定向。
curl-L -d
'tweet=hi'https://api.example.com/tweet
调试参数
-v
参数输出通信的整个过程,用于调试。
curl -v https://www.example.com
# --trace参数也可以用于调试,还会输出原始的二进制数据。
$
curl--trace - https://www.example.com
获取本机外网ip
curl ipecho.net/plain
wget
Linux系统下载文件工具
补充说明
wget命令 用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。
用于从网络上下载资源,没有指定目录,下载资源回默认为当前目录。wget虽然功能强大,但是使用起来还是比较简单:
- 支持断点下传功能 这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
- 同时支持FTP和HTTP下载方式 尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
- 支持代理服务器 对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
- 设置方便简单 可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
- 程序小,完全免费 程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的。
语法
wget[
参数
][
URL
地址
]
选项
启动参数:
-V, –-version
显示
wget
的版本后退出
-h, –-help
打印语法帮助
-b, –-background
启动后转入后台执行
-e, –-execute
=COMMAND
执行
`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件参数:
-o, –-output-file=FILE 把记录写到FILE文件中
-a, –-append-output=FILE 把记录追加到FILE文件中
-d, –-debug 打印调试输出
-q, –-quiet 安静模式(没有输出)
-v, –-verbose 冗长模式(这是缺省设置)
-nv, –-non-verbose 关掉冗长模式,但不是安静模式
-i, –-input-file=FILE 下载在FILE文件中出现的URLs
-F, –-force-html 把输入文件当作HTML格式文件对待
-B, –-base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–-sslcertfile=FILE 可选客户端证书
–-sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–-egd-file=FILE 指定EGD socket的文件名
下载参数:
–-bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –-tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –-output-document=FILE 把文档写到FILE文件中
-nc, –-no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –-continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –-timestamping 不要重新下载文件除非比本地文件新
-S, –-server-response 打印服务器的回应
–-spider 不下载任何东西
-T, –-timeout=SECONDS 设定响应超时的秒数
-w, –-wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –-proxy=on/off 打开或关闭代理
-Q, –-quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率
目录参数:
-nd –-no-directories 不创建目录
-x, –-force-directories 强制创建目录
-nH, –-no-host-directories 不创建主机目录
-P, –-directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
HTTP 选项参数:
-–http-user=USER 设定HTTP用户名为 USER.
-–http-passwd=PASS 设定http密码为 PASS
-C, –-cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E, –-html-extension 将所有text/html文档以.html扩展名保存
-–ignore-length 忽略 `Content-Length’
头域
-–header
=STRING
在
headers
中插入字符串
STRING
-–proxy-user
=USER
设定代理的用户名为
USER
-–proxy-passwd
=PASS
设定代理的密码为
PASS
-–referer
=URL
在
HTTP
请求中包含
`Referer: URL’头
-s, –-save-headers 保存HTTP头到文件
-U, –-user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION
-–no-http-keep-alive 关闭 HTTP活动链接 (永远链接)
–-cookies=off 不使用 cookies
–-load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
-–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
FTP 选项参数:
-nr, -–dont-remove-listing 不移走 `.listing’
文件
-g, -–glob
=on/off
打开或关闭文件名的
globbing
机制
-–passive-ftp
使用被动传输模式
(
缺省值
).
-–active-ftp
使用主动传输模式
-–retr-symlinks
在递归的时候,将链接指向文件
(而不是目录
)
递归下载参数:
-r, -–recursive
递归下载--慎用
!
-l, -–level
=NUMBER
最大递归深度
(
inf
或
0
代表无穷
)
–-delete-after
在现在完毕后局部删除文件
-k, –-convert-links
转换非相对链接为相对链接
-K, –-backup-converted
在转换文件
X
之前,将之备份为
X.orig
-m, –-mirror
等价于
-r -N -l inf -nr
-p, –-page-requisites
下载显示
HTML
文件的所有图片
递归下载中的包含和不包含
(accept/reject
):
-A, –-accept
=LIST
分号分隔的被接受扩展名的列表
-R, –-reject
=LIST
分号分隔的不被接受的扩展名的列表
-D, –-domains
=LIST
分号分隔的被接受域的列表
–-exclude-domains
=LIST
分号分隔的不被接受的域的列表
–-follow-ftp
跟踪
HTML
文档中的
FTP
链接
–-follow-tags
=LIST
分号分隔的被跟踪的
HTML
标签的列表
-G, –-ignore-tags
=LIST
分号分隔的被忽略的
HTML
标签的列表
-H, –-span-hosts
当递归时转到外部主机
-L, –-relative
仅仅跟踪相对链接
-I, –-include-directories
=LIST
允许目录的列表
-X, –-exclude-directories
=LIST
不被包含目录的列表
-np, –-no-parent
不要追溯到父目录
wget-S –-spider url
不下载只显示过程
参数
URL:下载指定的URL地址。
实例
使用wget下载单个文件
wget http://www.jsdig.com/testfile.zip
以下的例子是从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
下载并以不同的文件名保存
wget -O wordpress.zip http://www.jsdig.com/download.aspx?id
=1080
wget默认会以最后一个符合/
的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
错误:下面的例子会下载一个文件并以名称download.aspx?id=1080
保存:
wget http://www.jsdig.com/download?id
=1
即使下载的文件是zip格式,它仍然以download.php?id=1080
命令。
正确:为了解决这个问题,我们可以使用参数-O
来指定一个文件名:
wget -O wordpress.zip http://www.jsdig.com/download.aspx?id
=1080
wget限速下载
wget--limit-rate
=300k http://www.jsdig.com/testfile.zip
当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
使用wget断点续传
wget -c http://www.jsdig.com/testfile.zip
使用wget -c
重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c
参数。
使用wget后台下载
wget -b http://www.jsdig.com/testfile.zip
Continuing
inbackground, pid
1840.
Output will be written to `wget-log'.
对于下载非常大的文件的时候,我们可以使用参数-b
进行后台下载,你可以使用以下命令来察看下载进度:
tail -f wget-log
伪装代理名称下载
wget--user-agent
="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16"http://www.jsdig.com/testfile.zip
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过--user-agent
参数伪装。
测试下载链接
当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加--spider
参数进行检查。
wget --spider URL
如果下载链接正确,将会显示:
Spider mode enabled. Check
ifremote
fileexists.
HTTP request sent, awaiting response
...
200OK
Length: unspecified
[text/html
]
Remote
fileexists and could contain further links,
but recursion is disabled -- not retrieving.
这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误:
wget --spider url
Spider mode enabled. Check
ifremote
fileexists.
HTTP request sent, awaiting response
...
404Not Found
Remote
filedoes not exist -- broken link
!!!
你可以在以下几种情况下使用--spider
参数:
- 定时下载之前进行检查
- 间隔检测网站是否可用
- 检查网站页面的死链接
增加重试次数
wget--tries
=40URL
如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用--tries
增加重试次数。
下载多个文件
wget -i filelist.txt
首先,保存一份下载链接文件:
cat>
filelist.txt
url1
url2
url3
url4
接着使用这个文件和参数-i
下载。
镜像网站
wget --mirror -p --convert-links -P ./LOCAL URL
下载整个网站到本地。
--miror
开户镜像下载。-p
下载所有为了html页面显示正常的文件。--convert-links
下载后,转换成本地的链接。-P ./LOCAL
保存所有文件和目录到本地指定目录。
过滤指定格式下载
wget--reject
=gif ur
下载一个网站,但你不希望下载图片,可以使用这条命令。
把下载信息存入日志文件
wget -o download.log URL
不希望下载信息直接显示在终端而是在一个日志文件,可以使用。
限制总下载文件大小
wget -Q5m -i filelist.txt
当你想要下载的文件超过5M而退出下载,你可以使用。注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。
下载指定格式文件
wget -r -A.pdf url
可以在以下情况使用该功能:
- 下载一个网站的所有图片。
- 下载一个网站的所有视频。
- 下载一个网站的所有PDF文件。
FTP下载
wget ftp-url
wget--ftp-user
=USERNAME --ftp-password
=PASSWORD url
可以使用wget来完成ftp链接的下载。
使用wget匿名ftp下载:
wget ftp-url
使用wget用户名和密码认证的ftp下载:
wget--ftp-user
=USERNAME --ftp-password
=PASSWORD url
axel
多线程下载工具
补充说明
axel 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。
安装
CentOS安装Axel:
目前yum源上没有Axel,我们可以到 http://pkgs.repoforge.org/axel/ 下载rpm包安装。
32位CentOS执行下面命令:
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.i386.rpm
rpm -ivh axel-2.4-1.el5.rf.i386.rpm
64位CentOS执行下面命令:
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm
rpm -ivh axel-2.4-1.el5.rf.x86_64.rpm
Debian/Ubuntu安装Axel:
apt-getinstall
axel
语法
axel
[options
]url1
[url2
][
url
...
]
选项
--max-speed
=x , -s x
# 最高速度x
--num-connections
=x , -n x
# 连接数x
--output
=f , -o f
# 下载为本地文件f
--search
[=x
], -S
[x
]# 搜索镜像
--header
=x , -H x
# 添加头文件字符串x(指定 HTTP header)
--user-agent
=x , -U x
# 设置用户代理(指定 HTTP user agent)
--no-proxy
, -N
# 不使用代理服务器
--quiet
, -q
# 静默模式
--verbose
,-v
# 更多状态信息
--alternate
, -a
# Alternate progress indicator
--help
,-h
# 帮助
--version
,-V
# 版本信息
实例
如下载lnmp安装包指定10个线程,存到 /tmp/
:
axel -n
10-o /tmp/ http://www.jsdig.com/lnmp.tar.gz
如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。
流量相关
iftop
一款实时流量监控工具
补充说明
iftop命令 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。
语法
iftop
(选项
)
选项
iftop: display bandwidth usage on an interface by
host
Synopsis: iftop -h
|[
-npblNBP
][
-i interface
][
-f filter code
]
[
-F net/mask
][
-G net6/mask6
]
-h display this message
-n don
't do hostname lookups
-N don't convert port numbers to services
-p run
inpromiscuous mode
(show traffic between other
hosts on the same network segment
)
-b don't display a bar graph of traffic
-B Display bandwidth
inbytes
-i interface listen on named interface
-f filter code use filter code to
selectpackets to count
(
default: none, but only IP packets are counted
)
-F net/mask show traffic flows in/out of IPv4 network
-G net6/mask6 show traffic flows in/out of IPv6 network
-l display and count link-local IPv6 traffic
(default: off
)
-P show ports as well as hosts
-m limit sets the upper limit
forthe bandwidth scale
-c config
filespecifies an alternative configuration
file
-t use text interface without ncurses
Sorting orders:
-o 2s Sort by first
column(
2s traffic average
)
-o 10s Sort by second
column(
10s traffic average
)[
default
]
-o 40s Sort by third
column(
40s traffic average
)
-o
sourceSort by
sourceaddress
-o destination Sort by destination address
The following options are only available
incombination with -t
-s num print one single text output afer num seconds,
thenquit
-L num number of lines to print
界面说明
第一行为带宽,这里为1Mbit,不是字节哦. 连接列表,最后三列分别是2秒,10秒和40秒的平均流量 =>
代表发送
<=
代表接收
最后三行表示发送,接收和全部的流量, 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。
实例
iftop
# 默认是监控第一块网卡的流量
iftop -i eth1
# 监控eth1
iftop -n
# 直接显示IP, 不进行DNS反解析
iftop -N
# 直接显示连接埠编号, 不显示服务名称
iftop -F
192.168.1.0/24 or
192.168.1.0/255.255.255.0
# 显示某个网段进出封包流量
nethogs
终端下的网络流量监控工具
补充说明
有很多适用于Linux系统的开源网络监视工具。比如说,你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告,还有top监控系统当前运行进程。但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。
NetHogs 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。
来自NetHogs项目网站:
NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组。NetHogs不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况。这样就很容易找出哪个程序跑飞了然后突然占用你的带宽。
本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。
语法
nethogs
(选项)(参数)
选项
usage: nethogs
[-V
][
-h
][
-b
][
-d seconds
][
-v mode
][
-c count
][
-t
][
-p
][
-s
][
device
[device
[device
...
]]]
-V
:
打印版本。
-h
:
打印此帮助。
-b
:bughunt
模式 - 暗示tracemode。
-d
:
延迟更新刷新率(以秒为单位)。 默认值为1。
-v
:
视图模式(0
=KB / s
,1
=总KB,2
=总B,3
=总MB)。 默认值为0。
-c
:
更新次数。 默认为0(无限制)。
-t
:tracemode.
-p
:
煽动混乱模式(不推荐)。
-s
:
按发送列排序输出。
-a
:
监控所有设备,甚至环回/停止。
device
:
要监控的设备。 默认是所有接口启动和运行,不包括环回
当nethogs运行时,按:
q
:退出
s
:按SENT流量排序
r
:按RECEIVE流量排序
m
:在总(KB,B,MB)和KB / s模式之间切换
其他参数和用法
-d
:
刷新间隔
-h
:
帮助
-p
:promiscious
模式
-t
:trace
模式
-V
:
版本
交互命令
以下是NetHogs的一些交互命令(键盘快捷键)
- m : 修改单位
- r : 按流量排序
- s : 按发送流量排序
- q : 退出命令提示符
安装
在RHEL、CentOS和Fedora下安装NetHogs
要安装NetHogs,你必须要启用你所用Linux下的EPEL源。然后运行下面的yum命令下载安装NetHogs包。
yum
installnethogs
在Ubuntu、Linux mint和Debian下安装NetHogs
键入apt-get命令安装NetHogs包:
$
sudoapt-get
install
nethogs
NetHogs用法
在基于RedHat系统下键入如下命令启动NetHogs工具。
nethogs
在Debian/Ubuntu/Linux Mint下要执行NetHogs你必须拥有root权限:
$
sudonethogs
!nethogs
Ubuntu 12.10 下的NetHogs预览
正如上图所示,send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令。
NetHogs 命令行参数
以下就是NetHogs命令行的参数,用-d来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0)。例如:设置5秒钟的刷新频率,键入如下命令即可:
nethogs -d
5
$
sudonethogs -d
5
如果只用来监视设备(eth0)的网络带宽可以使用如下命令:
nethogs eth0
$
sudonethogs eth0
如果要同时监视eth0和eth1接口,使用以下命令即可:
nethogs eth0 eth1
$
sudonethogs eth0 eth1
连通性及响应速度
ping
测试主机之间网络的连通性
补充说明
ping命令 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法
ping
(选项
)(参数
)
选项
-d
:使用Socket的SO_DEBUG功能;
-c
<完成次数
>:设置完成要求回应的次数;
-f
:极限检测;
-i
<间隔秒数
>:指定收发信息的间隔时间;
-I
<网络界面
>:使用指定的网络界面送出数据包;
-l
<前置载入
>:设置在送出要求信息之前,先行发出的数据包;
-n
:只输出数值;
-p
<范本样式
>:设置填满数据包的范本样式;
-q
:不显示指令执行过程,开头和结尾的相关信息除外;
-r
:忽略普通的Routing Table,直接将数据包送到远端主机上;
-R
:记录路由过程;
-s
<数据包大小
>:设置数据包的大小;
-t
<存活数值
>:设置存活数值TTL的大小;
-v
:详细显示指令的执行过程。
参数
目的主机:指定发送ICMP报文的目的主机。
实例
[root@AY1307311912260196fcZ ~
]# ping www.jsdig.com
PING host.1.jsdig.com
(100.42.212.8
)56(84)
bytes of data.
64bytes from
100-42-212-8.static.webnx.com
(100.42.212.8
):
icmp_seq=1ttl=50
time=177
ms
64bytes from
100-42-212-8.static.webnx.com
(100.42.212.8
):
icmp_seq=2ttl=50
time=178
ms
64bytes from
100-42-212-8.static.webnx.com
(100.42.212.8
):
icmp_seq=3ttl=50
time=174
ms
64bytes from
100-42-212-8.static.webnx.com
(100.42.212.8
):
icmp_seq=4ttl=50
time=177
ms
...
按Ctrl+C结束
--- host.1.jsdig.com
pingstatistics ---
4packets transmitted,
4received,
0% packet loss,
time2998ms
rtt min/avg/max/mdev
=174.068
/176.916/178.182/1.683 ms
traceroute
显示数据包到主机间的路径
补充说明
traceroute命令 用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
语法
traceroute
(选项
)(参数
)
选项
-d
:使用Socket层级的排错功能;
-f
<存活数值
>:设置第一个检测数据包的存活数值TTL的大小;
-F
:设置勿离断位;
-g
<网关
>:设置来源路由网关,最多可设置8个;
-i
<网络界面
>:使用指定的网络界面送出数据包;
-I
:使用ICMP回应取代UDP资料信息;
-m
<存活数值
>:设置检测数据包的最大存活数值TTL的大小;
-n
:直接使用IP地址而非主机名称;
-p
<通信端口
>:设置UDP传输协议的通信端口;
-r
:忽略普通的Routing Table,直接将数据包送到远端主机上。
-s
<来源地址
>:设置本地主机送出数据包的IP地址;
-t
<服务类型
>:设置检测数据包的TOS数值;
-v
:详细显示指令的执行过程;
-w
<超时秒数
>:设置等待远端主机回报的时间;
-x
:开启或关闭数据包的正确性检验。
参数
主机:指定目的主机IP地址或主机名。
实例
traceroute www.58.com
tracerouteto www.58.com
(211.151.111.30
),
30hops max,
40byte packets
1
unknown
(192.168.2.1
)3.453
ms
3.801ms
3.937ms
2
221.6
.45.33
(221.6.45.33
)7.768
ms
7.816ms
7.840ms
3
221.6
.0.233
(221.6.0.233
)13.784
ms
13.827ms
221.6.9.81
(221.6.9.81
)9.758
ms
4
221.6
.2.169
(221.6.2.169
)11.777
ms
122.96.66.13
(122.96.66.13
)34.952
ms
221.6.2.53
(221.6.2.53
)41.372
ms
5
219.158
.96.149
(219.158.96.149
)39.167
ms
39.210ms
39.238ms
6
123.126
.0.194
(123.126.0.194
)37.270
ms
123.126.0.66
(123.126.0.66
)37.163
ms
37.441ms
7
124.65
.57.26
(124.65.57.26
)42.787
ms
42.799ms
42.809ms
8
61.148
.146.210
(61.148.146.210
)30.176
ms
61.148.154.98
(61.148.154.98
)32.613
ms
32.675ms
9
202.106
.42.102
(202.106.42.102
)44.563
ms
44.600ms
44.627ms
10210.77
.139.150
(210.77.139.150
)53.302
ms
53.233ms
53.032ms
11211.151
.104.6
(211.151.104.6
)39.585
ms
39.502ms
39.598ms
12211.151
.111.30
(211.151.111.30
)35.161
ms
35.938ms
36.005ms
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q
的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用traceroute -q 4 www.58.com
,表示向每个网关发送4个数据包。
有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n
参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
跳数设置
[root@localhost ~
]# traceroute -m 10 www.baidu.com
tracerouteto www.baidu.com
(61.135.169.105
),
10hops max,
40byte packets
1
192.168
.74.2
(192.168.74.2
)1.534
ms
1.775ms
1.961ms
2
211.151
.56.1
(211.151.56.1
)0.508
ms
0.514ms
0.507ms
3
211.151
.227.206
(211.151.227.206
)0.571
ms
0.558ms
0.550ms
4
210.77
.139.145
(210.77.139.145
)0.708
ms
0.729ms
0.785ms
5
202.106
.42.101
(202.106.42.101
)7.978
ms
8.155ms
8.311ms
6
bt-228-037.bta.net.cn
(202.106.228.37
)772.460
ms bt-228-025.bta.net.cn
(202.106.228.25
)2.152
ms
61.148.154.97
(61.148.154.97
)772.107
ms
7
124.65
.58.221
(124.65.58.221
)4.875
ms
61.148.146.29
(61.148.146.29
)2.124
ms
124.65.58.221
(124.65.58.221
)4.854
ms
8
123.126
.6.198
(123.126.6.198
)2.944
ms
61.148.156.6
(61.148.156.6
)3.505
ms
123.126.6.198
(123.126.6.198
)2.885
ms
9
* * *
10 * * *
其它一些实例
traceroute-m
10www.baidu.com
# 跳数设置
traceroute-n www.baidu.com
# 显示IP地址,不查主机名
traceroute-p
6888www.baidu.com
# 探测包使用的基本UDP端口设置6888
traceroute-q
4www.baidu.com
# 把探测包的个数设置为值4
traceroute-r www.baidu.com
# 绕过正常的路由表,直接发送到网络相连的主机
traceroute-w
3www.baidu.com
# 把对外发探测包的等待响应时间设置为3秒
tracepath
追踪目的主机经过的路由信息
补充说明
tracepath命令 用来追踪并显示报文到达目的主机所经过的路由信息。
语法
tracepath
(参数
)
参数
- 目的主机:指定追踪路由信息的目的主机;
- 端口:指定使用的UDP端口号。
实例
tracepath www.58.com
1
:
192.168.2.10
(192.168.2.10
)20
.150ms pmtu
1500
1
: unknown
(192.168.2.1
)9
.343ms
2
:
221.6.45.33
(221.6.45.33
)34
.430ms
3
:
221.6.9.81
(221.6.9.81
)19
.263ms
4
:
122.96.66.37
(122.96.66.37
)54
.372ms
5
:
219.158.96.149
(219.158.96.149
)asymm
6128
.526ms
6
:
123.126.0.66
(123.126.0.66
)138
.281ms
7
:
124.65.57.26
(124.65.57.26
)166
.244ms
8
:
61.148.154.98
(61.148.154.98
)103
.723ms
9
:
202.106.42.102
(202.106.42.102
)asymm
1078
.099ms
10:
210.77.139.150
(210.77.139.150
)asymm
9199
.930ms
11:
211.151.104.6
(211.151.104.6
)asymm
10121
.965ms
12: no reply
13:
211.151.111.30
(211.151.111.30
)asymm
12118
.989ms reached
Resume: pmtu
1500hops
13back
12
域名相关
nslookup
查询域名DNS信息的工具
补充说明
nslookup命令 是常用域名查询工具,就是查DNS信息用的命令。
nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf
的第一个dns地址)。或者输入nslookup -nameserver/ip
。进入非交互模式,就直接输入nslookup
域名
就可以了。
语法
nslookup
(选项
)(参数
)
选项
-sil
:不显示任何警告信息。
参数
域名:指定要查询域名。
实例
[root@localhost ~
]# nslookup www.jsdig.com
Server:
202.96.104.15
Address:
202.96.104.15
#53
Non-authoritative answer:
www.jsdig.com canonical name
=host.1.jsdig.com.
Name: host.1.jsdig.com
Address:
100.42.212.8
dig
域名查询工具
补充说明
dig命令 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
语法
dig
(选项
)(参数
)
选项
@
<服务器地址
>:指定进行域名解析的域名服务器;
-b
<ip
地址
>:当主机具有多个
IP
地址,指定使用本机的哪个
IP
地址向域名服务器发送域名查询请求;
-f
<文件名称
>:指定
dig
以批处理的方式运行,指定的文件中保存着需要批处理查询的
DNS
任务信息;
-P
:指定域名服务器所使用端口号;
-t
<类型
>:指定要查询的
DNS
数据类型;
-x
<IP
地址
>:执行逆向域名查询;
-4
:使用
IPv4
;
-6
:使用
IPv6
;
-h
:显示指令帮助信息。
参数
- 主机:指定要查询域名主机;
- 查询类型:指定DNS查询的类型;
- 查询类:指定查询DNS的class;
- 查询选项:指定查询选项。
实例
[root@localhost ~
]# dig www.jsdig.com
;<<>>
DiG
9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1
<<>>www.jsdig.com
;; global options: printcmd
;; Got answer:
;;-
>>HEADER
<<-opcode: QUERY, status: NOERROR, id:
2115
;;flags: qr rd ra
;QUERY:
1, ANSWER:
2, AUTHORITY:
2, ADDITIONAL:
0
;; QUESTION SECTION:
;www.jsdig.com. IN A
;; ANSWER SECTION:
www.jsdig.com.
0IN CNAME host.1.jsdig.com.
host.1.jsdig.com.
0IN A
100.42.212.8
;; AUTHORITY SECTION:
jsdig.com.
8IN NS f1g1ns2.dnspod.net.
jsdig.com.
8IN NS f1g1ns1.dnspod.net.
;;Query time:
0msec
;;SERVER:
202.96.104.15
#53(202.96.104.15)
;;WHEN: Thu Dec
2611
:14:37
2013
;; MSG SIZE rcvd:
121
jwhois
whois 客户端服务
补充说明
jwhois searches Whois servers for the object on the command line.The host to query is taken from a global configuration file, a configuration file specified on the command line, or selected directly on the command line.
语法
jwhois
[选项
]
选项
--version display version number and patch level
--help display this
help
-v, --verbose verbose debug output
-c FILE, --config
=FILE use FILE as configuration
file
-h HOST, --host
=HOST explicitly query HOST
-n, --no-redirect disable content redirection
-s, --no-whoisservers disable whois-servers.net
servicesupport
-a, --raw disable reformatting of the query
-i, --display-redirections display all redirects instead of hiding them
-p PORT, --port
=PORT use port number PORT
(in conjunction with HOST
)
-r, --rwhois force an rwhois query to be made
--rwhois-display
=DISPLAYsets the display option
inrwhois queries
--rwhois-limit
=LIMIT sets the maximum number of matches to
return
注:以上英文部分寻求网友协助翻译,翻译结果可发送至 sa(at)linuxde.net,谢谢!
实例
显示指定用户信息:
jwhois root
# 查找root用户信息
查询域名信息:
[root@localhost ~
]jwhois linuxde.net
[Querying whois.verisign-grs.com
]
[Redirected to whois.west263.com
]
[Querying whois.west263.com
]
[whois.west263.com
]
Domain Name: linuxde.net
Registry Domain id: whois protect
Registrar WHOIS Server: whois.west263.com
...
省略部分内容
抓包相关
tcpdump
一款sniffer工具,是Linux上的抓包工具,嗅探器
补充说明
tcpdump命令 是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w
选项将数据包保存到文件中,方便以后分析。
语法
tcpdump
(选项
)
选项
-a
:尝试将网络和广播地址转换成名称;
-c
<数据包数目
>:收到指定的数据包数目后,就停止进行倾倒操作;
-d
:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
-dd
:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
-ddd
:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
-e
:在每列倾倒资料上显示连接层级的文件头;
-f
:用数字显示网际网络地址;
-F
<表达文件
>:指定内含表达方式的文件;
-i
<网络界面
>:使用指定的网络截面送出数据包;
-l
:使用标准输出列的缓冲区;
-n
:不把主机的网络地址转换成名字;
-N
:不列出域名;
-O
:不将数据包编码最佳化;
-p
:不让网络界面进入混杂模式;
-q
:快速输出,仅列出少数的传输协议信息;
-r
<数据包文件
>:从指定的文件读取数据包数据;
-s
<数据包大小
>:设置每个数据包的大小;
-S
:用绝对而非相对数值列出TCP关联数;
-t
:在每列倾倒资料上不显示时间戳记;
-tt
: 在每列倾倒资料上显示未经格式化的时间戳记;
-T
<数据包类型
>:强制将表达方式所指定的数据包转译成设置的数据包类型;
-v
:详细显示指令执行过程;
-vv
:更详细显示指令执行过程;
-x
:用十六进制字码列出数据包资料;
-w
<数据包文件
>:把数据包数据写入指定的文件。
实例
直接启动tcpdump将监视第一个网络接口上所有流过的数据包
tcpdump
监视指定网络接口的数据包
tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。
监视指定主机的数据包
打印所有进入或离开sundown的数据包。
tcpdump
hostsundown
也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump
host210.27
.48.1
打印helios 与 hot 或者与 ace 之间通信的数据包
tcpdump
hosthelios and
\(hot or ace
\)
截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump
host210.27
.48.1 and
\(210.27
.48.2 or
210.27.48.3
\)
打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump
iphost
ace and not helios
如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump
iphost
210.27
.48.1 and
!210.27
.48.2
抓取eth0网卡上的包,使用:
sudo tcpdump -i eth0
截获主机hostname发送的所有数据
tcpdump -i eth0 src
hosthostname
监视所有送到主机hostname的数据包
tcpdump -i eth0 dst
hosthostname
监视指定主机和端口的数据包
如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port
23and
host210.27
.48.1
对本机的udp 123 端口进行监视 123 为ntp的服务端口
tcpdump udp port
123
监视指定网络的数据包
打印本地主机与Berkeley网络上的主机之间的所有通信数据包
tcpdump net ucb-ether
ucb-ether此处可理解为“Berkeley网络”的网络地址,此表达式最原始的含义可表达为:打印网络地址为ucb-ether的所有数据包
打印所有通过网关snup的ftp数据包
tcpdump
'gateway snup and (port ftp or ftp-data)'
注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析
打印所有源地址或目标地址是本地主机的IP数据包
tcpdump
ipand not net localnet
如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。
抓取80端口的HTTP报文,以文本形式展示:
sudotcpdump -i any port
80-A
查看网络io
sar
系统运行状态统计工具
补充说明
sar命令 是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
语法
sar
(选项
)(参数
)
选项
-A
:显示所有的报告信息;
-b
:显示I/O速率;
-B
:显示换页状态;
-c
:显示进程创建活动;
-d
:显示每个块设备的状态;
-e
:设置显示报告的结束时间;
-f
:从指定文件提取报告;
-i
:设状态信息刷新的间隔时间;
-P
:报告每个CPU的状态;
-R
:显示内存状态;
-u
:显示CPU利用率;
-v
:显示索引节点,文件和其他内核表的状态;
-w
:显示交换分区状态;
-x
:显示给定进程的状态。
参数
- 间隔时间:每次报告的间隔时间(秒);
- 次数:显示报告的次数。
实例
察看内存和交换空间的使用率:
sar -r
Linux
2.4.20-8
(www.jsdig.com
)20130503
12:00:01 AM kbmemfree kbmemused %memused
kbmemshrd kbbuffers kbcached
12:10:00 AM
2404681048252
81.34
0133724
485772
12:20:00 AM
2405081048212
81.34
0134172
485600
…
08:40:00 PM
934132354588
27.51
026080
185364
Average:
324346964374
74.83
096072
467559
kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。
观察系统部件10分钟,并对数据进行排序:
sar -o temp
6010
Linux上使用iftop可以查看网络使用情况,使用iotop可以查看磁盘io使用情况
iftop
一款实时流量监控工具
补充说明
iftop命令 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。
语法
iftop
(选项
)
选项
iftop: display bandwidth usage on an interface by
host
Synopsis: iftop -h
|[
-npblNBP
][
-i interface
][
-f filter code
]
[
-F net/mask
][
-G net6/mask6
]
-h display this message
-n don
't do hostname lookups
-N don't convert port numbers to services
-p run
inpromiscuous mode
(show traffic between other
hosts on the same network segment
)
-b don't display a bar graph of traffic
-B Display bandwidth
inbytes
-i interface listen on named interface
-f filter code use filter code to
selectpackets to count
(
default: none, but only IP packets are counted
)
-F net/mask show traffic flows in/out of IPv4 network
-G net6/mask6 show traffic flows in/out of IPv6 network
-l display and count link-local IPv6 traffic
(default: off
)
-P show ports as well as hosts
-m limit sets the upper limit
forthe bandwidth scale
-c config
filespecifies an alternative configuration
file
-t use text interface without ncurses
Sorting orders:
-o 2s Sort by first
column(
2s traffic average
)
-o 10s Sort by second
column(
10s traffic average
)[
default
]
-o 40s Sort by third
column(
40s traffic average
)
-o
sourceSort by
sourceaddress
-o destination Sort by destination address
The following options are only available
incombination with -t
-s num print one single text output afer num seconds,
thenquit
-L num number of lines to print
界面说明
第一行为带宽,这里为1Mbit,不是字节哦. 连接列表,最后三列分别是2秒,10秒和40秒的平均流量 =>
代表发送
<=
代表接收
最后三行表示发送,接收和全部的流量, 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。
实例
iftop
# 默认是监控第一块网卡的流量
iftop -i eth1
# 监控eth1
iftop -n
# 直接显示IP, 不进行DNS反解析
iftop -N
# 直接显示连接埠编号, 不显示服务名称
iftop -F
192.168.1.0/24 or
192.168.1.0/255.255.255.0
# 显示某个网段进出封包流量
iotop
用来监视磁盘I/O使用状况的工具
补充说明
iotop命令 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。
iotop使用Python语言编写而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本)。iotop提供有源代码及rpm包,可从其官方主页下载。
安装
Ubuntu
apt-getinstall
iotop
CentOS
yum
installiotop
编译安装
wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
tar zxf iotop-0.4.4.tar.gz
python setup.py build
python setup.py
install
语法
iotop
(选项)
选项
-o
:只显示有io操作的进程
-b
:批量显示,无交互,主要用作记录到文件。
-n NUM
:显示NUM次,主要用于非交互式模式。
-d SEC
:间隔SEC秒显示一次。
-p PID
:监控的进程pid。
-u
USER:监控的进程用户。
iotop常用快捷键:
- 左右箭头:改变排序方式,默认是按IO排序。
- r:改变排序顺序。
- o:只显示有IO输出的进程。
- p:进程/线程的显示方式的切换。
- a:显示累积使用量。
- q:退出。
实例
直接执行iotop就可以看到效果了:
Total DISK read:
0.00B/s
|Total DISK write:
0.00B/s
TID PRIO
USERDISK READ DISK WRITE SWAPIN IO
>command
1
be/4 root
0.00B/s
0.00B/s
0.00%
0.00% init
[3]
2
be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[kthreadd
]
3
rt/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[migration/0
]
4
be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[ksoftirqd/0
]
5
rt/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[watchdog/0
]
6
rt/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[migration/1
]
7
be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[ksoftirqd/1
]
8
rt/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[watchdog/1
]
9
be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[events/0
]
10
be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[events/1
]
11
be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[khelper
]
2572be/4 root
0.00B/s
0.00B/s
0.00%
0.00%
[bluetooth
]