第五章、 Linux 常用网络指令

来源:互联网 发布:怎么制作抽奖软件 编辑:程序博客网 时间:2024/05/22 05:21

1.网络参数设定使用的指令

 

任何时刻如果你想要做好你的网络参数设定,包括 IP 参数、路由参数与无线网络等等,就得要了解底下这些相关的指令才行!其中以 ifconfig 及 route 这两支指令算是较重要的喔! ^_^!当然,比较新鲜的作法,可以使用 ip 这个汇整的指令来设定 IP 参数啦!

ifconfig    :查询、设定网络卡与 IP 网域等相关参数;

ifup, ifdown:这两个档案是 script,透过更简单的方式来启动网络接口;

route       :查询、设定路由表 (route table)

ip          :复合式的指令, 可以直接修改上述提到的功能;


2.手动/自动设定与启动/关闭 IP 参数: ifconfig, ifup, ifdown

 

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

3.ifconfig指令

fconfig 主要是可以手动的启动、观察与修改网络接口的相关参数,可以修改的参数很多啊,包括 IP 参数以及 MTU 等等都可以修改,他的语法如下:

 

[root@www ~]# ifconfig {interface} {up | down}  <== 观察与启动接口

[root@www ~]# ifconfig interface {options}    <== 设定与修改接口

选项与参数:

interface:网络卡接口代号,包括 eth0, eth1, ppp0 等等

options  :可以接的参数,包括如下:

    up, down :启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数)。

    mtu        :可以设定不同的 MTU (Maximum Transmission Unit, 最大傳輸單位) 数值,例如 mtu 1500 (单位为 byte)。

    netmask  :就是子屏蔽网络。

    broadcast:就是广播地址啊。

 

[root@www ~]# ifconfig eth0:0 192.168.50.50

# 仔细看那个界面是 eth0:0 喔!那就是在该实体网卡上,再仿真一个网络接口,

# 亦即是在一张网络卡上面设定多个 IP 的意思啦!

[root@www ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:27:71:85:BD

          inet addr:192.168.100.100  Bcast:192.168.100.127  Mask:255.255.255.128

          inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1

          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)

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:71:85:BD

          inet addr:192.168.50.50  Bcast:192.168.50.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1

# 仔细看,是否与硬件有关的信息都相同啊!没错!因为是同一张网卡嘛!

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

4.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 显示的内容详解

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:这个路由传递封包的接口。

注:

 

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

192.168.1.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

 

假如有2个route,针对的都是同一个网域。由于路由是依照顺序来排列与传送的, 所以不论封包是由那个界面 (eth0, eth1) 所接收,都会由上述的 eth0 传送出去, 所以,在一部主机上面设定两个相同网域的 IP 本身没有什么意义!有点多此一举就是了。 除非是类似虚拟机 (Xen, VMware 等软件) 所架设的多主机时,才会有这个必要~

 

# 范例二:路由的增加与删除

[root@www ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0

# 上面这个动作可以删除掉 169.254.0.0/16 这个网域!

# 请注意,在删除的时候,需要将路由表上面出现的信息都写入

# 包括 netmask , dev 等等参数喔!注意注意

[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 互通!这样说,可以理解吗?

 

 

注:你只要记得,当出现『SIOCADDRT: Network is unreachable』 这个错误时,肯定是由于 gw 后面接的 IP 无法直接与你的网域沟通 (Gateway 并不在你的网域内), 所以,赶紧检查一下是否输入错误啊!

 

5. ping :两部主机两点沟通

这个 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 旗标,表示封包可以在其他主机上拆包与打包

 


 

用 ping 追踪路径中的最大 MTU 数值
# 范例二:找出最大的 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 设定吧!


6.traceroute:两主机之间节点分析

 

ping 是两部主机之间的回声与否判断, 那么有没有指令可以追踪两部主机之间通过的各个节点 (node) 通讯状况的好坏呢?举例来说,如果我们联机到 yahoo 的速度比平常慢,你觉得是 (1)自己的网络环境有问题? (2)还是外部的 Internet 有问题?如果是 (1) 的话,我们当然需要检查自己的网络环境啊,看看是否又有谁中毒了?但如果是 Internet 的问题呢?那只有『等等等』啊! 判断是 (1) 还是 (2) 就得要使用 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 的 IP 就是了。

# 范例一:侦测本机到 yahoo 去的各节点联机状态

[root@www ~]# traceroute -n google.com

 

 



7.netstat:查看本机的网络联机与后门

如果你觉得你的某个网络服务明明就启动了,但是就是无法造成联机的话,那么应该怎么办? 首先你应该要查询一下自己的网络接口所监听的端口 (port) 来看看是否真的有启动。

 

[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 每五秒更新一次网络状态的显示;

8.侦测主机名与 IP 对应: host, nslookup

1)host可以用来查看某个主机名的IP,举例:

 

[root@www ~]# host [-a] hostname [server]

选项与参数:

-a :列出该主机详细的各项主机名设定数据

[server] :可以使用非为 /etc/resolv.conf 的 DNS 服务器 IP 来查询。

# 范例一:列出 tw.yahoo.com 的 IP 

[root@www ~]# host tw.yahoo.com

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

9.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 这个档案

ftp> mkdir dir      <==建立 dir 这个目录

ftp> lcd /home      <==切换『本地端主机』的工作目录

ftp> passive        <==启动或关闭 passive 模式

ftp> binary         <==数据传输模式设定为 binary 格式

ftp> bye            <==结束 ftp 软件的使用

10. 文字接口下载器: wget

[root@www ~]# wget [option] [网址]
选项与参数:
若想要联机的网站有提供账号与密码的保护时,可以利用这两个参数来输入喔!
--http-user=usrname
--http-password=password
--quiet :不要显示 wget 在抓取数据时候的显示讯息
更多的参数请自行参考 man wget 吧! ^_^

还可以透过 proxy 的帮助来下载呢!透过修改 /etc/wgetrc 来设定你的代理服务器:
[root@www ~]# vim /etc/wgetrc
#http_proxy = http://proxy.yoyodyne.com:18023/  <==找到底下这几行,大约在 78 行
#ftp_proxy = http://proxy.yoyodyne.com:18023/
#use_proxy = on

# 将他改成类似底下的模样,记得,你必须要有可接受的 proxy 主机才行!
http_proxy = http://proxy.ksu.edu.tw:3128/
use_proxy = on





11.文字接口封包撷取器: tcpdump(注:这个 tcpdump 必须使用 root 的身份执行)
[root@www ~]# tcpdump [-AennqX] [-i 接口] [-w 储存档名] [-c 次数]   [-r 档案] [所欲撷取的封包数据格式]
选项与参数:
-A :封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。
-e :使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示;
-nn:直接以 IP 及 port number 显示,而非主机名与服务名称
-q :仅列出较为简短的封包信息,每一行的内容比较精简
-X :可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容很有用
-i :后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面;
-w :如果你要将监听所得的封包数据储存下来,用这个参数就对了,后面接档名。
-r :从后面接的档案将封包数据读出来。那个『档案』是已经存在的档案,并且这个『档案』是由 -w 所制作出来的。
-c :监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听,直到使用者输入 [ctrl]-c 为止。
所欲撷取的封包数据格式:我们可以专门针对某些通讯协议或者是 IP 来源进行封包撷取,
     那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有:
     'host foo', 'host 127.0.0.1' :针对单部主机来进行封包撷取
     'net 192.168' :针对某个网域来进行封包的撷取;
     'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制
     'tcp port 21':还可以针对通讯协议侦测,如 tcp, udp, arp, ether 等
     还可以利用 and 与 or 来进行封包数据的整合显示呢!

# 范例一:以 IP 与 port number 捉下 eth0 这个网络卡上的封包
[root@www ~]# tcpdump -i eth0 -nn -c 5
结束后,我们会看到类似这样的数据:
5 packets captured    <==捉下来的封包数量
8 packets received by filter     <==由过滤所得的总封包数量
0 packets dropped by kernel     <==被核心所丢弃的封包

现在我们对封包中的某一段进行分析,例如:
17:01:47.362139 IP 192.168.1.100.22 > 192.168.1.101.1937: Flags [P.], seq 196:472, ack 1,
这段的意义如下:
1)17:01:47.362139:这个是此封包被撷取的时间,『时:分:秒』的单位;
2)IP:透过的通讯协议是 IP ;
3)192.168.1.100.22 > :传送端是 192.168.1.100 这个 IP,而传送的 port number 为 22,你必须要了解的是,那个大于 (>) 的符号指的是封包的传输方向喔!
4)192.168.1.101.1937:接收端的 IP 是 192.168.1.101, 且该主机开启 port 1937 来接收;
5)[P.], seq 196:472:这个封包带有 PUSH 的数据传输标志, 且传输的数据为整体数据的 196~472 byte;
6)ack 1:ACK 的相关资料。
最简单的说法,就是该封包是由 192.168.1.100 传到 192.168.1.101,透过的 port 是由 22 到 1937 , 使用的是 PUSH 的旗标,而不是 SYN 之类的主动联机标志。呵呵!不容易看的懂吧!所以说,上头才讲请务必到 TCP 表头数据的部分去瞧一瞧的啊!


# 范例二:例如只取出 port 21 的联机封包,可以这样做:
[root@www ~]# tcpdump -i eth0 -nn port 21


12.图形接口封包撷取器: wireshark

用法查看手册,这里只是提提。

 

 

 

 

 

 

 

原创粉丝点击