zoukankan      html  css  js  c++  java
  • Linux资源监控命令/工具(网络)

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

    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:就是广播地址啊!

    # 范例一:观察所有的网络接口(直接输入 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 "网络接口代号" 』即可喔! ^_^!至于上表出现的各项数据是这样的(数据排列由上而下、由左而右):

    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:总接收、发送字节总量。

    范例二:暂时修改网络接口,给予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』即可达成

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

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

    [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才能够关闭该接口。

    重要配置文件:
    [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 <==就是最大传输单元的设定值,若不更改则可省略


    2、路由修改: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恢复原系统的网络即可。


    3、网络参数综合指令: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


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


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


    6、两部主机两点沟通: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


    7、两主机间各节点分析: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


    8、察看本机的网络联机与后台: 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喔!


    9、侦测主机名与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


    10、网络联机/传输

    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去查阅相关内部指令


    11、浏览下载工具

    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


    12、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


    13、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] //设置网口类型
    ...


    14、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


    15、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 退出监控。


    16、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
    开机时用来设置加载内核模块的文件,网卡与对应模块写在这个文件中。

  • 相关阅读:
    javascript之instanceof原理
    x86之描述符表寄存器
    Mac之DTerm
    C的一些特性
    Mac i386 Operands and Addressing Modes
    shell之条件测试
    linux之dup&dup2
    javascript之this
    x86之段描述符
    进制转换
  • 原文地址:https://www.cnblogs.com/defias/p/3426980.html
Copyright © 2011-2022 走看看