Linux资源监控命令/工具(网络)

一、手动/自动设定与启动/关闭IP参数:ifconfig,ifup,ifdown
     这三个指令的用途都是在启动网络接口,不过,ifup与ifdown仅能就/etc/sysconfig/network-scripts内的ifcfg-ethX (X 为数字)进行启动或关闭的动做,并不能直接修改网络参数,除非手动调整ifcfg-ethX档案才行。至于ifconfig则能够直接手动给予某个接口IP或调整其网络参数!底下咱们就分别来谈一谈!php

1)ifconfig
ifconfig主要是能够手动的启动、观察与修改网络接口的相关参数,能够修改的参数不少啊,包括 IP 参数以及MTU等等均可以修改,他的语法以下:
[root@www ~]# ifconfig {interface} {up|down} <== 观察与启动接口
[root@www ~]# ifconfig interface {options} <== 设定与修改接口
选项与参数:
interface:网络卡接口代号,包括 eth0, eth1, ppp0 等等
options:能够接的参数,包括以下:
up, down:启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数);
mtu:能够设定不一样的 MTU 数值,例如 mtu 1500 (单位为 byte);
netmask:就是子屏蔽网络;
broadcast:就是广播地址啊!html

# 范例一:观察全部的网络接口(直接输入 ifconfig)
[root@www ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD
inet addr:192.168.1.100 Bcast:192.168.1.255
Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
net.qiang@hotmail.com
RX packets:2555 errors:0 dropped:0 overruns:0 frame:0
TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB)
   通常来讲,直接输入 ifconfig 就会列出目前已经被启动的卡,不论这个卡是否有给予IP,都会被显示出来。而若是是输入 ifconfig eth0,则仅会秀出这张接口的相关数据,而无论该接口是否有启动。因此若是你想要知道某张网络卡的 Hardware Address,直接输入『 ifconfig "网络接口代号" 』便可喔! ^_^!至于上表出现的各项数据是这样的(数据排列由上而下、由左而右):node

eth0:就是网络卡的代号,也有 lo 这个 loopback ;
HWaddr:就是网络卡的硬件地址,俗称的MAC是也;
inet addr:IPv4的IP地址,后续的Bcast, Mask分别表明的是
Broadcast 与 netmask 喔!
inet6 addr:是 IPv6 的版本的 IP ,咱们没有使用,因此略过;
MTU:最大传输单元;
RX:网络由启动到目前为止的封包接收状况,packets表明封包数、errors表明封包发生错误的数量、dropped表明封包因为有问题而遭丢弃的数量等等;
TX:与 RX 相反,为网络由启动到目前为止的传送状况;
collisions:表明封包碰撞的状况,若是发生太屡次,表示你的网络情况不太好;
txqueuelen:表明用来传输数据的缓冲区的储存长度;
RX bytes, TX bytes:总接收、发送字节总量。linux

范例二:暂时修改网络接口,给予eth0一个 192.168.100.100/24的参数
[root@www ~]# ifconfig eth0 192.168.100.100 # 若是不加任何其余参数,则系统会依照该IP所在的class范围自动的计算出netmask以及network, broadcast 等IP参数,若想改其余参数则:
[root@www ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 mtu 8000 #设定不一样参数的网络接口,同时设定MTU的数值!
[root@www ~]# ifconfig eth0 mtu 9000 #仅修改该接口的MTU数值,其余的保持不动!
[root@www ~]# ifconfig eth0:0 192.168.50.50 #仔细看是eth0:0喔!那就是在该实体网卡上再仿真一个网络接口,亦便是在一张网络卡上面设定多个IP的意思
[root@www ~]# ifconfig eth0:0 down #关掉 eth0:0 这个界面。那若是想用默认值启动 eth1:『ifconfig eth1 up』便可达成web

范例三:将手动的处理所有取消,使用原有的设定值重建网络参数:
[root@www ~]# /etc/init.d/network restart # 刚刚设定的数据所有失效,会以ifcfg-ethX 的设定为主!
使用ifconfig能够暂时手动来设定或修改某个适配卡的相关功能,而且也能够透过eth0:0这种虚拟的网络接口来设定好一张网络卡上面的多个IP ,手动的方式真是简单啊!而且设定错误也不打紧,由于咱们能够利用/etc/init.d/network restart来从新启动整个网络接口,那么以前手动的设定数据会所有都失效喔!另外,要启动某个网络接口,但又不让他具备IP参数时,直接给他ifconfig eth0 up便可! 这个动做常常在无线网卡当中会进行,由于咱们必需要启动无线网卡让他去侦测AP存在与否啊!shell

2)ifup, ifdown
实时的手动修改一些网络接口参数,能够利用ifconfig来达成,若是是要直接以配置文件,亦便是在 /etc/sysconfig/network-scripts里面的 ifcfg-ethx等档案
的设定参数来启动的话,那就得要透过ifdown或ifup来达成了。apache

[root@www ~]# ifup {interface}
[root@www ~]# ifdown {interface}
ifup与ifdown 真是太简单了!这两支程序实际上是script而已,他会直接到/etc/sysconfig/network-scripts目录下搜寻对应的配置文件,例如ifup eth0时,
他会找出ifcfg-eth0这个档案的内容,而后来加以设定。不过,因为这两支程序主要是搜寻配置文件 (ifcfg-ethx) 来进行启动与关闭的,因此在使用前请肯定 ifcfg-ethx是否真的存在于正确的目录内,不然会启动失败喔!另外,若是以ifconfig eth0 .... 来设定或者是修改了网络接口后,那就没法再以ifdown eth0的方式来关闭了!由于ifdown会分析比对目前的网络参数与ifcfg-eth0是否相符,不符的话,就会放弃该次动做。所以,使用ifconfig修改完毕后,应该要以ifconfig eth0 down才可以关闭该接口。vim

重要配置文件:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" <==网络卡代号,必需要ifcfg-eth0相对应
HWADDR="08:00:27:71:85:BD" <==就是网络卡地址,若只有一张网卡,可省略此项目
NM_CONTROLLED="no" <==不要受到其余软件的网络管理!
ONBOOT="yes" <==是否默认启动此接口的意思
BOOTPROTO=none <==取得IP的方式,其实关键词只有dhcp,手动可输入none
IPADDR=192.168.1.100 <==就是IP啊
NETMASK=255.255.255.0 <==就是子网掩码
GATEWAY=192.168.1.254 <==就是预设路由
# 重点是上面这几个设定项目,底下的则能够省略的!
NETWORK=192.168.1.0 <==就是该网段的第一个IP,可省略
BROADCAST=192.168.1.255 <==就是广播地址啰,可省略
MTU=1500 <==就是最大传输单元的设定值,若不更改则可省略windows

 


二、路由修改:route
[root@www ~]# route [-nee]
[root@www ~]# route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
[root@www ~]# route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
参数:
-n:不要使用通信协议或主机名,直接使用IP或 port number;
-ee:使用更详细的信息来显示浏览器

增长(add) 与删除(del)路由的相关参数:
-net:表示后面接的路由为一个网域;
-host:表示后面接的为链接到单部主机的路由;
netmask:与网域有关,能够设定netmask决定网域的大小;
gw:gateway 的简写,后续接的是 IP 的数值喔,与 dev 不一样;
dev:若是只是要指定由那一块网络卡联机出去,则使用这个设定,后面接eth0等

范例一:单纯的观察路由状态
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0

[root@www ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
加-n参数的主要是显示出IP ,至于使用route而已的话,显示的则是『主机名』喔!也就是说,在预设的状况下,route会去找出该IP的主机名,若是找不到呢?就会显示的钝钝的(有点小慢),因此说,一般都直接使用route -n啦!由上面看起来,咱们也知道 default=0.0.0.0/0.0.0.0,而上面的信息有哪些你必需要知道的呢?

Destination, Genmask:这两个玩意儿就是分别是 network与netmask啦!因此这两个咚咚就组合成为一个完整的网域啰!
Gateway:该网域是经过哪一个 gateway 链接出去的?若是显示 0.0.0.0 表示该路由是直接由本机传送,亦便可以透过局域网络的 MAC 直接传讯;若是有显示IP的话,表示该路由须要通过路由器 (通信闸) 的帮忙才可以传送出去。
Flags:总共有多个旗标,表明的意义以下:
U (route is up):该路由是启动的;
H (target is a host):目标是一部主机 (IP) 而非网域;
G (use gateway):须要透过外部的主机 (gateway) 来转递封包;
R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
D (dynamically installed by daemon or redirect):已经由服务或转port功能设定为动态路由
M (modified from routing daemon or redirect):路由已经被修改了;
! (reject route):这个路由将不会被接受(用来抵挡不安全的网域! )
Iface:这个路由传递封包的接口。

此外,观察一下上面的路由排列顺序喔,依序是由小网域(192.168.1.0/24 是Class C),逐渐到大网域(169.254.0.0/16 Class B)最后是预设路由(0.0.0.0/0.0.0.0)。而后当咱们要判断某个网络封包应该如何传送的时候,该封包会经由这个路由的过程来判断喔!

# 范例二:路由的增长与删除
[root@www ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0 #删除掉169.254.0.0/16这个网域!

[root@www ~]# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0 #透过route add来增长一个路由!请注意,这个路由的设定必需要可以与你的网络互通。举例来讲,若是我下达底下的指令就会显示错误:route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254 #由于个人主机内仅有192.168.1.11这个IP ,因此不能直接与192.168.200.254这个网段直接使用MAC互通!这样说,能够理解吗?

[root@www ~]# route add default gw 192.168.1.250 #增长预设(默认)路由的方法!请注意,只要有一个预设路由就够了喔!一样的那个192.168.1.250的IP也须要能与你的LAN通才行!在这个地方若是你随便设定后,记得使用这个指令从新设定你的网络:/etc/init.d/network restart

Tips:通常来讲,若是一个新的环境内的主机,在不想要变更原系统的网络状况下,又须要临时配置一个新的网络用于测试,能够先手动变成:『ifconfig eth0 192.168.1.100; route add default gw 192.168.1.254』这样就配置了一个新的网络。等到完成测试后,再给她/etc/init.d/network restart恢复原系统的网络便可。

 


三、网络参数综合指令:ip
[root@www ~]# ip [option] [动做] [指令]
选项与参数:
option:设定的参数,主要有:
-s :显示出该装置的统计数据(statistics),例如总接受封包数等;
动做:亦便是能够针对哪些网络参数进行动做,包括:
link :关于装置 (device) 的相关设定,包括MTU, MAC地址等等
addr/address :关于IP协议,例如多IP的达成等等;
route :与路由有关的相关设定
1)关于装置接口 (device) 的相关设定:ip link
ip link能够设定与装置 (device) 有关的相关参数,包括MTU以及该网络接口的MA 等等,固然也能够启动(up)或关闭(down)某个网络接口啦!整个语法是这样的:
[root@www ~]# ip [-s] link show <== 单纯的查阅该装置相关的信息
[root@www ~]# ip link set [device] [动做与参数]
选项与参数:
show:仅显示出这个装置的相关内容,若是加上-s会显示更多统计数据;
set:能够开始设定项目, device 指的是 eth0, eth1 等等界面代号;
动做与参数:
up|down:启动(up)或关闭(down)某个接口,其余参数使用默认的以太网络;
address:若是这个装置能够更改MAC的话,用这个参数修改!
name:给予这个装置一个特殊的名字;
mtu:最大传输单元

#范例一:显示出全部的接口信息
[root@www ~]# ip link show
[root@www ~]# ip -s link show eth0
使用ip link show能够显示出整个装置接口的硬件相关信息,包括网卡地址(MAC)、MTU等等,而若是加上 -s 的参数后则这个网络卡的相关统计信息就会被列出来, 包括接收(RX)及传送(TX)的封包数量等等,详细的内容与ifconfig所输出的结果相同的。

范例二:启动、关闭与设定装置的相关信息
[root@www ~]# ip link set eth0 up #启动 eth0 这个装置接口;
[root@www ~]# ip link set eth0 down #就关闭啊!简单的要命~
[root@www ~]# ip link set eth0 mtu 1000 # 更改MTU的值,达到1000bytes,单位就是bytes啊!
更新网络卡的MTU使用ifconfig也能够达成啊!没啥了不得,不过,若是是要更改『网络卡代号、 MAC 地址的信息』的话,那可就得使用ip啰~不过,设定前可能得
要先关闭该网络卡,不然会不成功。 以下所示:

# 范例三:修改网络卡代号、MAC 等参数
[root@www ~]# ip link set eth0 down <==关闭界面
[root@www ~]# ip link set eth0 name vbird <==设定
[root@www ~]# ip link show <==观察一下
[root@www ~]# ip link set vbird name eth0 <==改回来
[root@www ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@www ~]# ip link show eth0
若是你的网络卡支持硬件地址(MAC)能够更改的话,上面这个动做就能够更改你的网络卡地址了!厉害吧!不过,仍是那句老话,测试完以后请马上改回来。

2)关于额外的IP相关设定:ip address
若是说ip link是与 OSI七层协定的第二层有关的话,那么 ip address(ip addr)就是与第三层网络层有关的参数啦!主要是在设定与IP有关的各项参数,包括 netmask, broadcast 等等。
[root@www ~]# ip address show <==就是查阅 IP 参数啊!

[root@www ~]# ip address [add|del] [IP 参数] [dev 装置名] [相关参数]
选项与参数:
show:单纯的显示出接口的 IP 信息啊;
add|del:进行相关参数的增长(add)或删除(del)设定;
IP参数:主要就是网域的设定,例如 192.168.100.100/24之类的设定喔;
dev :这个 IP 参数所要设定的接口,例如 eth0, eth1 等等;
相关参数:
broadcast:设定广播地址,若是设定值是 + 表示『让系统自动计算』
label:亦便是这个装置的别名,例如 eth0:0 就是了!
scope:这个界面的领域,一般是这几个大类:
global:容许来自全部来源的联机;
site:仅支持 IPv6 ,仅容许本主机的联机;
link:仅容许本装置自我联机;
host:仅容许本主机内部的联机;
因此固然是使用 global 啰!预设也是 global 啦!

范例一:显示出全部的接口之IP参数:
[root@www ~]# ip address show

范例二:新增一个接口,名称假设为 eth0:vbird
[root@www ~]# ip address add 192.168.50.50/24 broadcast + dev eth0 label eth0:vbird #那个 broadcast + 也能够写成broadcast 192.168.50.255啦!
[root@www ~]# ip address show eth0

范例三:将刚刚的界面删除
[root@www ~]# ip address del 192.168.50.50/24 dev eth0 #删除就比较简单

3)关于路由的相关设定:ip route
这个项目固然就是路由的观察与设定啰!事实上,ip route的功能几乎与route这个指令差很少,可是他还能够进行额外的参数设计,例如MTU的规划等等,至关的强悍啊!
[root@www ~]# ip route show <==单纯的显示出路由的设定而已
[root@www ~]# ip route [add|del] [IP 或网域] [via gateway] [dev 装置]
选项与参数:
show :单纯的显示出路由表,也可使用list;
add|del :增长(add)或删除(del)路由的意思。
IP 或网域:可以使用 192.168.50.0/24之类的网域或者是单纯的IP;
via:从那个 gateway 出去,不必定须要;
dev:由那个装置连出去,这就须要了!
mtu:能够额外的设定 MTU 的数值喔!

范例一:显示出目前的路由资料
[root@www ~]# ip route show

范例二:增长路由,主要是本机直接可沟通的网域
[root@www ~]# ip route add 192.168.5.0/24 dev eth0 #针对本机直接沟通的网域设定好路由,不须要透过外部的路由器
[root@www ~]# ip route show

范例三:增长能够通往外部的路由,需透过router喔!
[root@www ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@www ~]# ip route show

范例四:增长预设路由
[root@www ~]# ip route add default via 192.168.1.254 dev eth0 #只要一个预设路由就OK !

范例五:删除路由
[root@www ~]# ip route del 192.168.10.0/24
[root@www ~]# ip route del 192.168.5.0/24

 


四、无线网络:iwlist, iwconfig
iwlist:利用无线网卡进行无线AP的侦测与取得相关的数据
iwconfig:设定无线网卡的相关参数

 


五、手动使用 DHCP 自动取得IP参数: dhclient
若是你是使用 DHCP 协议在局域网络内取得 IP 的话,那么是否必定要去编辑ifcfg-eth0内的BOOTPROTO呢?嘿嘿!有个更快速的做法,那就是利用dhclient这个指令~由于这个指令才是真正发送dhcp要求工做的程序啊!
范例:
[root@www ~]# dhclient eth0
够简单吧!这样就能够马上叫咱们的网络卡以dhcp协议去尝试取得IP喔!

 


六、两部主机两点沟通:ping
ping主要透过ICMP封包来进行整个网络的情况报告,最重要的就是那个ICMP type 0, 8这两个类型,分别是要求回报与主动回报网络状态是否存在的特性。要特别注意的是,ping仍是须要透过IP 封包来传送ICMP封包的,而IP封包里面有个至关重要的TTL属性,这是很重要的一个路由特性。
[root@www ~]# ping [选项与参数] IP
选项与参数:
-c 数值:后面接的是执行ping的次数,例如-c 5;
-n:在输出数据时不进行IP与主机名的反查,直接使用IP输出(速度较快);
-s 数值:发送出去的ICMP封包大小,预设为56bytes,不过你能够放大此数值;
-t 数值:TTL 的数值,预设是 255,每通过一个节点就会少一;
-W 数值:等待响应对方主机的秒数。
-M [do|dont] :主要在侦测网络的 MTU 数值大小,两个常见的项目是:
do:表明传送一个DF(Don't Fragment)旗标,让封包不能从新拆包与打包;
dont:表明不要传送DF旗标,表示封包能够在其余主机上拆包与打包

范例一:侦测一下168.95.1.1这部DNS主机是否存在?
[root@www ~]# ping -c 3 168.95.1.1
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=1 ttl=245 time=15.4 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=245 time=10.0 ms
64 bytes from 168.95.1.1: icmp_seq=3 ttl=245 time=10.2 ms
--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2047ms
rtt min/avg/max/mdev = 10.056/11.910/15.453/2.506 ms
ping最简单的功能就是传送ICMP 封包去要求对方主机回应是否存在于网络环境中,上面的响应消息当中,几个重要的项目是这样的:
64 bytes:表示此次传送的 ICMP 封包大小为 64 bytes 这么大,这是默认值,在某些特殊场合中,例如要搜索整个网络内最大的MTU时,可使用 -s 2000之类的数值来取代;?
icmp_seq=1:ICMP所侦测进行的次数,第一次编号为1;
ttl=243:TTL与IP封包内的TTL是相同的,每通过一个带有MAC的节点(node)时,例如 router, bridge 时,TTL 就会减小一,预设的TTL为255,你能够透过-t 150之类的方法来从新设定预设 TTL 数值;
time=15.4 ms:响应时间,单位有ms(0.001 秒)及us(0.000001 秒),通常来讲,越小的响应时间,表示两部主机之间的网络联机越良好!
若是你忘记加上 -c 3这样的规定侦测次数,那就得要使用 [ctrl]-c将他结束掉!

用ping追踪路径中的最大MTU数值?
咱们知道网络卡的MTU修改能够透过ifconfig或者是ip等指令来达成,那么追踪整个网络传输的最大MTU时,又该如何查询?呵呵!最简单的方法固然是透过ping传送一个大封包,而且不准中继的路由器或switch将该封包重组,那就可以处理啦!没错!能够这样的:

范例二:找出最大的 MTU 数值
[root@www ~]# ping -c 2 -s 1000 -M do 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 1000(1028) bytes of data.
1008 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.311 ms
若是有响应,那就是能够接受这个封包,若是无响应,那就表示这个 MTU 太大了。
[root@www ~]# ping -c 2 -s 8000 -M do 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 8000(8028) bytes of data.
From 192.168.1.100 icmp_seq=1 Frag needed and DF set (mtu = 1500)
这个错误讯息是说,本地端的MTU才到1500而已,你要侦测8000的MTU根本就是没法达成的!那要如何是好?用前一小节介绍的ip link来进行MTU设定吧!不过,你须要知道的是,因为IP封包表头(不含 options) 就已经占用了20bytes ,再加上ICMP的表头有8 bytes,因此固然你在使用-s size的时候,那个封包的大小就得要先扣除 (20+8=28)的大小了。所以若是要使用MTU为1500时,就得要下达『 ping -s 1472 -M do xx.yy.zz.ip 』才行啊!
另外,因为本地端的网络卡MTU也会影响到侦测,因此若是想要侦测整个传输媒体的MTU数值, 那么每一个能够调整的主机就得要先使用ifcofig或ip先将MTU调大,而后再去进行侦测,不然就会出现像上面提供的案例同样,可能会出现错误讯息的!

常见的各类接口的MTU值分别为︰
网络接口 MTU
Ethernet 1500
PPPoE 1492
Dial-up(Modem) 576

 


七、两主机间各节点分析:traceroute
[root@www ~]# traceroute [选项与参数] IP
选项与参数:
-n:能够没必要进行主机的名称解析,单纯用IP,速度较快!
-U:使用UDP的port 33434 来进行侦测,这是预设的侦测协议;
-I:使用ICMP的方式来进行侦测;
-T:使用TCP来进行侦测,通常使用port 80测试
-w:若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒
-p 端口:若不想使用 UDP 与 TCP 的预设埠号来侦测,可在此改变埠号。
-i 装置:用在比较复杂的环境,若是你的网络接口不少很复杂时,才会用到这个参数;举例来讲,你有两条ADSL能够链接到外部,那你的主机会有两个ppp,你可使用-i来选择是ppp0仍是ppp1啦!
-g 路由:与-i的参数相仿,只是-g后面接的是gateway的I 就是了。

范例一:侦测本机到yahoo去的各节点联机状态
[root@www ~]# traceroute -n tw.yahoo.com
traceroute to tw.yahoo.com (119.160.246.241), 30 hops max, 40 byte packets
1 192.168.1.254 0.279 ms 0.156 ms 0.169 ms
2 172.20.168.254 0.430 ms 0.513 ms 0.409 ms
3 10.40.1.1 0.996 ms 0.890 ms 1.042 ms
4 203.72.191.85 0.942 ms 0.969 ms 0.951 ms
5 211.20.206.58 1.360 ms 1.379 ms 1.355 ms
6 203.75.72.90 1.123 ms 0.988 ms 1.086 ms
7 220.128.24.22 11.238 ms 11.179 ms 11.128 ms
8 220.128.1.82 12.456 ms 12.327 ms 12.221 ms
9 220.128.3.149 8.062 ms 8.058 ms 7.990 ms
10 * * *
11 119.160.240.1 10.688 ms 10.590 ms 119.160.240.3 10.047 ms
12 * * * <==可能有防火墙装置等状况发生所致
这个traceroute挺有意思的,这个指令会针对欲链接的目的地之全部node进行UDP的超时等待,例如上面的例子当中,由鸟哥的主机链接到Yahoo时,他会通过12个
节点以上,traceroute会主动的对这12个节点作UDP的回声等待,并侦测回复的时间,每节点侦测三次,最终回传像上头显示的结果。你能够发现每一个节点其实回复的
时间大约在50 ms之内,算是还能够的Internet环境了。
比较特殊的算是第10/12个,会回传星号的表明该node可能设有某些防御措施,让咱们发送的封包信息被丢弃所致。 由于咱们是直接透过路由器转递封包,并无进入路由器去取得路由器的使用资源,因此某些路由器仅支持封包转递,并不会接受来自客户端的各项侦测啦!此时就会出现上述的问题。由于traceroute预设使用UDP封包,若是你想尝试使用其余封包,那么-I或-T能够试看看啰!
因为目前UDP/ICMP的攻击层出不穷,所以不少路由器可能就此取消这两个封包的响应功能。因此咱们可使用TCP来侦测呦!例如使用一样的方法,透过等待时间1 秒,以及TCP 80端口的状况下,能够这样作:
[root@www ~]# traceroute -w 1 -n -T tw.yahoo.com

 


八、察看本机的网络联机与后台: netstat
[root@www ~]# netstat -[rn] <==与路由有关的参数
[root@www ~]# netstat -[antulpc] <==与网络接口有关的参数
选项与参数:
与路由(route)有关的参数说明:
-r:列出路由表(route table),功能如同route这个指令;
-n:不使用主机名与服务名称,使用IP与port number,如同route -n
与网络接口有关的参数:
-a:列出全部的联机状态,包括tcp/udp/unix socket等;
-t:仅列出TCP封包的联机;
-u:仅列出UDP封包的联机;
-l:仅列出有在Listen(监听)的服务之网络状态;
-p:列出PID与Program的檔名;
-c:能够设定几秒钟后自动更新一次,例如-c 5每五秒更新一次网络状态的显示;

-e 显示扩展信息,例如uid等;
-s 按各个协议进行统计。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

netstat的输出主要分为两大部分,分别是TCP/IP的网络接口部分以及传统的Unix socket部分(Active Unix domain sockets的内容)。 
一般建议加上-n 这个参数的,由于能够避过主机名与服务名称的反查,直接以IP及端口口号码(port number)来显示,显示的速度上会快不少!

Active Internet connections称为有源TCP链接,主要是分为几个大项: 
Proto:该联机的封包协议,主要为TCP/UDP等封包; 
Recv-Q:非由用户程序链接所复制而来的总bytes数; 
Send-Q:由远程主机所传送而来,但不具备ACK标志的总bytes数, 意指主动联机SYN或其余标志的封包所占的bytes数; 
Local Address:本地端的地址,能够是IP (-n 参数存在时),也能够是完整的主机名。使用的格是就是『 IP:port 』只是IP的格式有IPv4及IPv6的差别。如上所示,在port 22的接口中,使用的:::22就是针对IPv6的显示,事实上他就相同于0.0.0.0:22的意思。 至于port 25仅针对lo接口开放,意指Internet基本上是没法链接到我本机的25端口啦! 
Foreign Address:远程的主机IP与port number 
stat:状态栏,主要的状态含有: 
ESTABLISED:已创建联机的状态; 
SYN_SENT:发出主动联机 (SYN 标志) 的联机封包; 
SYN_RECV:接收到一个要求联机的主动联机封包; 
FIN_WAIT1:该插槽服务(socket)已中断,该联机正在断线当中; 
FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的封包; 
TIME_WAIT:该联机已挂断,但 socket 还在网络上等待结束; 
LISTEN:一般用在服务的监听 port !可以使用『 -l 』参数查阅。

    其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字通常都应该是0。若是不是则表示软件包正在队列中堆积。这种状况只能在很是少的状况见到。 

Active UNIX domain sockets称为有源Unix域套接口(和网络套接字同样,可是只能用于本机通讯,性能能够提升一倍):

Proto   显示链接使用的协议
RefCnt   表示链接到本套接口上的进程号
Types   显示套接口的类型
State   显示套接口当前的状态
Path   表示链接到套接口的其它进程使用的路径名
Flags   联机的旗标

实用命令实例
1)列出全部端口 (包括监听和未监听的)
列出全部端口:netstat -a
列出全部tcp端口:netstat -at
列出全部udp端口:netstat -au
2)列出全部处于监听状态的Sockets
只显示监听端口:netstat -l
只列出全部监听tcp端口:netstat -lt
只列出全部监听udp端口:netstat -lu
只列出全部监听UNIX端口:netstat -lx
3)显示每一个协议的统计信息
显示全部端口的统计信息:netstat -s
显示TCP或UDP端口的统计信息:netstat -st 或 -su
4)持续输出netstat信息:netstat 将每隔一秒输出网络信息。
5)显示系统不支持的地址族(Address Families):netstat --verbose
6)找出程序运行的端口:netstat -an | grep ':80' 并非全部的进程都能找到,没有权限的会不显示,使用 root 权限查看全部的信息。
7)显示网络接口列表:netstat -i

范例一:列出目前的路由表状态,且以IP及port number显示:
[root@www ~]# netstat -rn
其实这个参数就跟route -n如出一辙,这不是netstat的主要功能。

范例二:列出目前的全部网络联机状态,使用IP与port number
[root@www ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
....(中间省略)....

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
....(中间省略)....
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 11075 @/var/run/hald/dbus-uukdg1qMPh
unix 2 [ ACC ] STREAM LISTENING 10952 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 11032 /var/run/acpid.socket
....(底下省略)....

范例三:秀出目前已经启动的网络服务
[root@www ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:34796 0.0.0.0:* LISTEN 987/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master
tcp 0 0 :::22 :::* LISTEN 1155/sshd
udp 0 0 0.0.0.0:111 0.0.0.0:* 969/rpcbind
....(底下省略)....
     上面最重要的实际上是那个-l的参数,由于能够仅列出有在Listen的port
能够发现不少的网络服务其实仅针对本机的lo开放而已,因特网是链接不到该端口与服务的。而由上述的数据咱们也能够看到,启动port 111的,其实就是rpcbind 那只程序,那若是想要关闭这个端口, 你可使用kill删除PID 969,也可使用killall删除rpcbind这个程序便可。如此一来,很轻松的你就能知道哪一个程序启动了哪些端口口啰!

范例四:观察本机上头全部的网络联机状态
[root@www ~]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1155/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master
tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED 4716/0
....(底下省略)....
    第四条数据表明目前已经创建联机的一条网络联机,他是由远程主机192.168.1.101启动一个大于1024的端口向本地端主机192.168.1.100的port 22 进行的一条联机,你必需要想起来的是:『Client 端是随机取一个大于1024以上的port进行联机』,此外『只有root能够启动小于1024如下的port』,那就看的懂上头那条联机啰!若是这条联机你想要砍掉他的话, 看到最右边的 4716 了没?kill!
至于传统的Unix socket的数据,记得使用man netstat查阅一下吧!这个 Unix socket一般是用在一些仅在本机上运做的程序所开启的插槽接口文件,例如 X Window不都是在本机上运做而已吗?那何须启动网络的port呢?固然可使用Unix socket啰,另外,例如Postfix这一类的网络服务器,因为不少动做都是在本机上头来完成的,因此以会占用不少的Unix socket喔!

 


九、侦测主机名与IP对应:host, nslookup
关于主机名与IP的对应,除了DNS客户端功能的dig指令,其实还有两个更简单的指令,那就是host与nslookup啦!?
1)host
这个指令能够用来查出某个主机名的IP喔!举例来讲,咱们想要知道tw.yahoo.com的IP时,能够这样作:
[root@www ~]# host [-a] hostname [server]
选项与参数:
-a :列出该主机详细的各项主机名设定数据
[server] :可使用非为/etc/resolv.conf的DNS服务器IP来查询。

范例一:列出 tw.yahoo.com 的 IP
[root@www ~]# host tw.yahoo.com
net.qiang@hotmail.com
tw.yahoo.com is an alias for tw-cidr.fyap.b.yahoo.com.
tw-cidr.fyap.b.yahoo.com is an alias for tw-tpe-fo.fyap.b.yahoo.com.
tw-tpe-fo.fyap.b.yahoo.com has address 119.160.246.241
瞧! IP是119.160.246.241啊!很简单就能够查询到IP了!那么这个IP是向谁查询的呢?其实就是写在/etc/resolv.conf那个档案内的DNS服务器IP啦!若是不
想要使用该档案内的主机来查询,也能够这样作:
[root@www ~]# host tw.yahoo.com 168.95.1.1
Using domain server:
Name: 168.95.1.1
Address: 168.95.1.1#53
Aliases:
tw.yahoo.com is an alias for tw-cidr.fyap.b.yahoo.com.
tw-cidr.fyap.b.yahoo.com is an alias for tw-tpe-fo.fyap.b.yahoo.com.
tw-tpe-fo.fyap.b.yahoo.com has address 119.160.246.241
会告诉咱们所使用来查询的主机是哪一部吶!这样就够清楚了吧!不过,再怎么清楚也比不过dig这个指令的,因此这个指令仅是参考参考啦!
2)nslookup
这玩意儿的用途与host基本上是同样的,就是用来做为IP与主机名对应的检查,一样是使用/etc/resolv.conf这个档案来做为DNS服务器的来源选择。
[root@www ~]# nslookup [-query=[type]] [hostname|IP]
选项与参数:
-query=type:查询的类型,除了传统的IP与主机名对应外,DNS还有不少信息,因此咱们能够查询不少不一样的信息,包括mx, cname等等,
例如: -query=mx 的查询方法!

# 范例一:找出www.google.com的IP
[root@www ~]# nslookup www.google.com

范例二:找出168.95.1.1的主机名
[root@www ~]# nslookup 168.95.1.1

 


十、网络联机/传输

1)telnet
[root@www ~]# telnet [host|IP [port]

 

2)FTP
[root@www ~]# ftp [host|IP] [port]
范例一:联机到昆山科大去看看
[root@www ~]# yum install ftp
[root@www ~]# ftp ftp.ksu.edu.tw
Connected to ftp.ksu.edu.tw (120.114.150.21).
220---------- Welcome to Pure-FTPd [privsep] ----------220-You are user number 1 of 50 allowed.
220-Local time is now 16:25. Server port: 21.
220-Only anonymous FTP is allowed here <==这个FTP仅支援匿名
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 5 minutes of inactivity.
Name (ftp.ksu.edu.tw:root): anonymous <==这里用匿名登陆!
230 Anonymous user logged in <==嗯!确实是匿名登陆了!
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> <==最终登入的结果看起来是这样!
ftp> help <==提供须要的指令说明,能够常参考!
ftp> dir <==显示远程服务器的目录内容 (文件名列表)
ftp> cd /pub <==变换目录到 /pub 当中
ftp> get filename <==下载单一档案,档名为 filename
ftp> mget filename* <==下载多个档案,可以使用通配符 *
ftp> put filename <==上传 filename 这个档案到服务器上
ftp> delete file <==删除主机上的 file 这个档案
net.qiang@hotmail.com
ftp> mkdir dir <==创建 dir 这个目录
ftp> lcd /home <==切换『本地端主机』的工做目录
ftp> passive <==启动或关闭 passive 模式
ftp> binary <==数据传输模式设定为 binary 格式
ftp> bye <==结束 ftp 软件的使用

 

3)lftp
[root@www ~]# lftp [-p port] [-u user[,pass]] [host|IP]
[root@www ~]# lftp -f filename
[root@www ~]# lftp -c "commands"
选项与参数:
-p :后面能够直接接上远程FTP主机提供的port
-u :后面则是接上帐号与密码,就可以链接上远程主机了,若是没有加帐号密码, lftp默认会使用anonymous尝试匿名登陆
-f :能够将指令写入脚本中,这样能够帮助进行shell script的自动处理
-c :后面直接加上所须要的指令。
范例一:利用 lftp 登入昆山科大的FTP服务器
[root@www ~]# yum install lftp
[root@www ~]# lftp ftp.ksu.edu.tw
lftp ftp.ksu.edu.tw:~>
瞧!一会儿就登入了!你一样可以使用help去查阅相关内部指令

 


十一、浏览下载工具

1)文字浏览器:links
[root@www ~]# links [options] [URL]
选项与参数:
-anonymous [0|1]:是否使用匿名登陆的意思;
-dump [0|1]:是否将网页的数据直接输出到standard out而非links软件功能
-dump_charset :后面接想要透过dump输出到屏幕的语系编码,big5使用cp950
范例一:浏览Linux kernel网站
[root@www ~]# links http://www.kernel.org

若是是浏览Linux本机上面的网页档案,那就可使用以下的方式:
[root@www ~]# links /usr/share/doc/HTML/index.html

透过links将tw.yahoo.com的网页内容整个抓下来储存
[root@www ~]# links -dump http://tw.yahoo.com > yahoo.html

某个网站透过GET功能能够上传帐号为user密码为pw,用文字接口处理为:
[root@www ~]# links -dump http://some.site.name/web.php?name=user&password=pw > testfile

2)文字接口下载器:wget
[root@www ~]# wget [option] [网址]
选项与参数:
若想要联机的网站有提供帐号与密码的保护时,能够利用这两个参数来输入
--http-user=usrname
--http-password=password
--quiet :不要显示wget在抓取数据时候的显示讯息
更多的参数请自行参考man wget吧!

范例一:请下载2.6.39版的核心
[root@www ~]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
--2011-07-18 16:58:26--http://www.kernel.org/pub/linux/kernel/v2.6/..
Resolving www.kernel.org... 130.239.17.5, 149.20.4.69, 149.20.20.133, ...
Connecting to www.kernel.org|130.239.17.5|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 76096559 (73M) [application/x-bzip2]
Saving to: `linux-2.6.39.tar.bz2'
88% [================================> ] 67,520,536 1.85M/s

 


十二、arp
[root@www ~]# arp -[nd] hostname
[root@www ~]# arp -s hostname(IP) Hardware_address
选项与参数:
-n:将主机名以IP的型态显示
-d:将hostname的hardware_address由ARP table当中删除掉
-s:设定某个IP或hostname的MAC到ARP table当中
范例一:列出目前主机上面记载的 IP/MAC 对应的ARP表格
[root@www ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.100 ether 00:01:03:01:02:03 C eth0
192.168.1.240 ether 00:01:03:01:DE:0A C eth0
192.168.1.254 ether 00:01:03:55:74:AB C eth0
范例二:将192.168.1.100那部主机的网卡卡号直接写入ARP表格中
[root@www ~]# arp -s 192.168.1.100 01:00:2D:23:A1:0E #这个指令的目的在创建静态ARP

 


1三、ethtool
Ethtool是Linux下用于查询及设置网卡参数的命令。
选项与参数:
ethtool ethX //查询ethX网口基本设置
ethtool –h //显示ethtool的命令帮助(help)
ethtool –i ethX //查询ethX网口的相关信息
ethtool –d ethX //查询ethX网口注册性信息
ethtool –r ethX //重置ethX网口到自适应模式
ethtool –S ethX //查询ethX网口收发包统计
ethtool –s ethX [speed 10|100|1000]\ //设置网口速率10/100/1000M
[duplex half|full]\ //设置网口半/全双工
[autoneg on|off]\ //设置网口是否自协商
[port tp|aui|bnc|mii]\ //设置网口类型
...

 


1四、ifstat

    网络接口监测工具,比较简单看网络流量概况。

1)比较简单的看网络流量
ifstat
eth0 eth1
KB/s in KB/s out KB/s in KB/s out
0.07 0.20 0.00 0.00
0.07 0.15 0.58 0.00
默认ifstat不监控回环接口,显示的流量单位是KB。

2)监控全部网络接口
ifstat -a
lo eth0 eth1
KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
0.00 0.00 0.28 0.58 0.06 0.06
0.00 0.00 1.41 1.13 0.00 0.00
0.61 0.61 0.26 0.23 0.00 0.00

 


1五、iftop

    实时流量监控工具,监控TCP/IP链接等,缺点就是无报表功能。必须以root身份才能运行。
参数:
-i 设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n 使host信息默认直接都显示IP,如:# iftop -n
-N 使端口信息默认直接都显示端口号,如: # iftop -N
-F 显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h (display this message),帮助,显示参数信息
-p 使用这个参数后,中间的列表显示的本地主机信息,出现了本机之外的IP信息;
-b 使流量图形条默认就显示;
-f 这个暂时还不太会用,过滤计算包用的;
-P 使host信息及端口信息默认就都显示;
-m 设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

1)执行iftop -N -n -i eth1:
19.1Mb 38.1Mb 57.2Mb 76.3Mb 95.4Mb
+-----------------+-----------------+--------------------+--------------------+---------------------
192.168.1.11 => 192.168.1.66 5.3Mb 3.22Mb 3.20Mb
       <=         219kb 45.7kb 49.3kb
192.168.1.11 => 192.168.1.29 144kb 30.8kb 29.6kb
       <=                    11.3Mb 2.38Mb 2.74Mb
192.168.1.11 => 12.2.11.71 0b 6.40kb 6.66kb
       <=                0b  0b      0b
192.168.1.11 => 192.168.1.8 2.63kb 1.43kb 932b
                  <=                  1.31kb 1.05kb 893b
192.168.1.11 => 192.168.2.78 2.53kb 1.54kb 2.15kb
                  <=                    160b   160b   187b
192.168.1.11 => 111.126.195.69 0b 166b 69b
                  <=                       0b  0b   0b
------------------------------------------------------------------------------------------------------
TX: cum: 9.70MB peak: 15.6Mb rates: 15.4Mb 3.26Mb 3.23Mb
RX: 8.38MB 14.9Mb 11.5Mb 2.42Mb 2.79Mb
TOTAL: 18.1MB 30.5Mb 27.0Mb 5.69Mb 6.03Mb
第一行:带宽显示
中间部分:外部链接列表,即记录了哪些ip正在和本机的网络链接
中间部分右边:实时参数分别是该访问ip链接到本机2秒,10秒和40秒的平均流量
=>表明发送数据,<= 表明接收数据
底部三行:
表示发送,接收和所有的流量
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
经过iftop的界面很容易找到哪一个ip在霸占网络流量,这个是ifstat作不到的。不过iftop的流量显示单位是Mb,这个b是bit,是位,不是字节,而ifstat的KB,这个B就是字节了,byte是bit的8倍。

2)进入iftop画面后的一些操做命令(注意大小写)
h 切换是否显示帮助;
n 切换显示本机的IP或主机名;
s 切换是否显示本机的host信息;
d 切换是否显示远端目标主机的host信息;
t 切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
N 切换显示端口号或端口服务名称;
S 切换是否显示本机的端口信息;
D 切换是否显示远端目标主机的端口信息;
p 切换是否显示端口信息;
P 切换暂停/继续显示;
b 切换是否显示平均流量图形条;
B 切换计算2秒或10秒或40秒内的平均流量;
T 切换是否显示每一个链接的总流量;
l 打开屏幕过滤功能,输入要过滤的字符,好比ip,按回车后,屏幕就只显示这个IP相关的流量信息;
L 切换显示画面上边的刻度;刻度不一样,流量图形条会有变化;
j或k 能够向上或向下滚动屏幕显示的链接记录;
1或2或3 能够根据右侧显示的三列流量数据进行排序;
< 根据左边的本机名或IP排序;
> 根据远端目标主机的主机名或IP排序;
o 切换是否固定只显示当前的链接;
f 能够编辑过滤代码,这是翻译过来的说法,我还没用过这个!
! 可使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
q 退出监控。

 


1六、Netcat(nc) 

     网络工具中的瑞士军刀,它能经过TCP和UDP在网络中读写数据。经过与其余工具结合和重定向,你能够在脚本中以多种方式使用它。使用netcat命令所能完成的事情使人惊讶。netcat所作的就是在两台电脑之间创建连接并返回两个数据流,在这以后所能作的事就看你的想像力了。你能创建一个服务器,传输文件,与朋友聊天,传输流媒体或者用它做为其它协议的独立客户端。之因此叫作netcat,由于它是网络上的cat,想象一下cat的功能,读出一个文件的内容,而后输出到屏幕上(默认的stdout是屏幕,固然能够重定向到其余地方)。netcat也是如此,它读取一端的输入,而后传送到网络的另外一端, 就这么简单.可是千万不要小看了它,netcat能够完成不少任务,,尤为是和其余程序组合时.好了,废话少说,进入正题吧.:p 网上有两种版本的netcat,一个是@stake公司netcat也就是最初的版本,还有一个是GNU的,它的功能更多,不过GNU的没有windows平台的版本。
参数:
-e prog 程序重定向,一旦链接,就执行 [危险]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h 帮助信息
-i secs 延时的间隔
-l 监听模式,用于入站链接
-n 指定数字的IP地址,不能用hostname
-o file 记录16进制的传输
-p port 本地端口号
-r 任意指定本地及远程端口
-s addr 本地源地址
-u UDP模式
-v 详细输出――用两个-v可获得更详细的内容
-w secs timeout的时间
-z 将输入输出关掉――用于扫描时

1)简单服务器
nc -l -p 1234 [假设这台主机ip为192.168.0.1]
而后客户端输入:nc 192.168.0.1 1234
你从任一端输入的数据就会显示在另外一端了。其实netcat的server和client的区别并不大,区别仅仅在于谁执行了-l来监听端口,一旦链接创建之后,就没有什么区别了。从这里咱们也能够了解netcat的工做原理了,经过网络连接读写数据。

2)telnet服务器(打开一个shell)
nc有一个-e的选项,用来指定在链接后执行的程序。在windows平台上能够指定-e cmd.exe(若是是98就指定command.exe、linux则指定-e bash),或者任何你喜欢的shell,或者是你本身编写的程序,指定-e的效果是由你指定的程序代替了nc本身来接受另外一端的输入,并把输入(命令)后反馈的结果显示到另外一端。
server: nc -l -p 1234 -e bash
client: nc 192.168.0.1 1234
就能够远程登录server了。

不必定非要在server端指定-e,也能够在client端指定:
server: nc -l -p 1234
client: nc -e 192.168.0.1 1234
这样,就至关于在server上远程登录client了。有关client和server的区分是没有什么意义的.谁作为telnet server的标准只有一个,谁执行了-e [shell]。

假如netcat不支持-e参数仍然可以建立远程shell
Server
$mkfifo /tmp/tmp_fifo
$cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
建立了一个fifo文件,而后使用管道命令把这个fifo文件内容定向到shell 2>&1中。是用来重定向标准错误输出和标准输出,而后管道到netcat 运行的端口1567上。至此,咱们已经把netcat的输出重定向到fifo文件中。

Client
$nc -n 172.31.100.7 1567
会获得一个shell提示符在客户端

3)端口扫描
端口扫描常常被系统管理员和黑客用来发如今一些机器上开放端口,帮助他们识别系统中的漏洞。
nc -z -v -n 172.31.100.7 21-25
打印21到25全部开放的端口。Banner是一个文本,Banner是一个你链接的服务发送给你的文本信息。当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是很是有用的。可是,并非全部的服务都会发送banner。一旦你发现开放的端口,你能够容易的使用netcat链接服务抓取他们的banner:
nc -v 172.31.100.7 21
netcat命令会链接开放端口21而且打印运行在这个端口上服务的banner信息。

4)Chat Server
假如你想和你的朋友聊聊,有不少的软件和信息服务能够供你使用。可是,若是你没有这么奢侈的配置,好比你在计算机实验室,全部的对外的链接都是被限制的,你怎样和成天坐在隔壁房间的朋友沟通那?不要郁闷了,netcat提供了这样一种方法,你只须要建立一个Chat服务器,一个预先肯定好的端口,这样子他就能够联系到你了。
Server
$nc -l 1567
netcat命令在1567端口启动了一个tcp服务器,全部的标准输出和输入会输出到该端口。输出和输入都在此shell中展现。

Client
$nc 172.31.100.7 1567
无论你在机器B上键入什么都会出如今机器A上。

5)文件传输
大部分时间中,咱们都在试图经过网络或者其余工具传输文件。有不少种方法,好比FTP,SCP等等,可是当你只是须要临时或者一次传输文件,真的值得浪费时间来安装配置一个软件到你的机器上嘛。假设,你想要传一个文件file.txt 从A到B。A或者B均可以做为服务器或者客户端,如下让A做为服务器,B为客户端。
Server
$nc -l 1567 < file.txt

Client
$nc -n 172.31.100.7 1567 > file.txt
这里咱们建立了一个服务器在A上而且重定向netcat的输入为文件file.txt,那么当任何成功链接到该端口,netcat会发送file的文件内容。在客户端咱们重定向输出到file.txt,当B链接到A,A发送文件内容,B保存文件内容到file.txt。没有必要建立文件源做为Server,咱们也能够相反的方法使用。像下面的咱们发送文件从B到A,可是服务器建立在A上,此次咱们仅须要重定向netcat的输出而且重定向B的输入文件。

B做为Server:
Server
$nc -l 1567 > file.txt

Client
nc 172.31.100.23 1567 < file.txt

若是想要发送多个文件,或者整个目录,同样很简单,只须要使用压缩工具tar,压缩后发送压缩包。
Server
$tar -cvf – dir_name | nc -l 1567

Client
$nc -n 172.31.100.7 1567 | tar -xvf -
这里在A服务器上,咱们建立一个tar归档包而且经过-在控制台重定向它,而后使用管道,重定向给netcat,netcat能够经过网络发送它。在客户端咱们下载该压缩包经过netcat 管道而后打开文件。
若是想要节省带宽传输压缩包,咱们可使用bzip2或者其余工具压缩。

Server 经过bzip2压缩
$tar -cvf – dir_name| bzip2 -z | nc -l 1567

Client 使用bzip2解压
$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -

6)流视频
虽然不是生成流视频的最好方法,但若是服务器上没有特定的工具,使用netcat,咱们仍然有但愿作成这件事。
服务端
$cat video.avi | nc -l 1567
这里咱们只是从一个视频文件中读入并重定向输出到netcat客户端

客户端
$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
这里咱们从socket中读入数据并重定向到mplayer。

7)克隆一个设备
若是你已经安装配置一台Linux机器而且须要重复一样的操做对其余的机器,而你不想在重复配置一遍。不在须要重复配置安装的过程,只启动另外一台机器的一些引导能够随身碟和克隆你的机器。克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上
Server
$dd if=/dev/sda | nc -l 1567

Client
$nc -n 172.31.100.7 1567 | dd of=/dev/sda
经过netcat服务器重定向它的输出流到其余机器而且写入到磁盘中,它会随着分区表拷贝全部的信息。可是若是咱们已经作过度区而且只须要克隆root分区,咱们能够根据咱们系统root分区的位置,更改sda为sda1,sda2等等。

8)指定源端口
假设你的防火墙过滤除25端口外其它全部端口,你须要使用-p选项指定源端口。
服务器端
$nc -l 1567

客户端
$nc 172.31.100.7 1567 -p 25

使用1024之内的端口须要root权限。该命令将在客户端开启25端口用于通信,不然将使用随机端口。

9)指定源地址
假设你的机器有多个地址,但愿明确指定使用哪一个地址用于外部数据通信。咱们能够在netcat中使用-s选项指定ip地址。
服务器端
$nc -u -l 1567 < file.txt

客户端
$nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt

该命令将绑定地址172.31.100.5。

10)HTTP客户端用于下载文件
这是最简单的使用方式,nc <hostname> <portnumber>
nc http://www.apache.org/ 80

get / http/1.1
HTTP/1.1 400 Bad Request
Date: Mon, 08 Dec 2003 06:23:31 GMT
Server: Apache/2.0.48-dev (Unix)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr />
<address>Apache/2.0.48-dev (Unix) Server at http://www.apache.org/ Port 80</address>
</body></html>

11)其它用途
a、使用-t选项模拟Telnet客户端
b、链接到邮件服务器,使用SMTP协议检查邮件,
c、使用ffmpeg截取屏幕并经过流式传输分享,等等。其它更多用途。
只要你了解协议就可使用netcat做为网络通信媒介,实现各类客户端。

 

 


附:Linux网络相关配置文件

1)、/etc/sysconfig/network-scripts/ifcfg-eth0
设置IP、Netmask、DHCP与Gateway等。
重要参数:
DEVICE=网卡的代号
BOOTPROTO=是否使用dhcp
HWADDR=是否加入网卡卡号(MAC)
IPADDR=就是IP地址
NETMASK=子网掩码
ONBOOT=要不要默认启动此接口
GATEWAY=网关
NM_CONTROLLED=额外的网管软件,建议取消

2)、/etc/sysconfig/network
设置主机名 
重要参数:
NETWORKING=要不要有网络
NETWORKING_IPV6=支援IPv6否?
HOSTNAME=你的主机名

3)、/etc/resolv.conf
DNS IP
重要参数:
nameserver DNS的IP

4)、/etc/hosts
私有IP对应的主机名
重要参数:
私有IP 主机名 别名

5)、/etc/services
记录架构在TCP/IP上面的总协议,包括http, ftp, ssh, telnet等等服务所定义的port number,都是这个档案所规划出来的。若是你想要自定义一个新的协议与port 的对应,就得要改这个档案了。

6)、/etc/protocols
这个档案则是在定义出IP封包协议的相关数据,包括ICMP/TCP/UDP这方面的封包协议的定义等。

7)、/etc/modprobe.conf 开机时用来设置加载内核模块的文件,网卡与对应模块写在这个文件中。

相关文章
相关标签/搜索