您的位置:首页 > 理论基础 > 计算机网络

【鸟哥的linux私房菜-学习笔记】Linux 常用网络指令

2015-11-21 09:20 741 查看

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

ifconfig    :查询、设定网络卡与 IP 网域等相关参数;
ifup, ifdown:这两个档案是 script,透过更简单的方式来启动网络接口;
route       :查询、设定路由表 (route table)
ip          :复合式的指令, 可以直接修改上述提到的功能;


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

[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 一个 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 的意思


数据意义:

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


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


内容意义:

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


# 范例二:路由的增加与删除
[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 互通!这样说,可以理解吗?

[root@www ~]# route add default gw 192.168.1.250
# 增加预设路由的方法!请注意,只要有一个预设路由就够了!
# 同样的,那个 192.168.1.250 的 IP 也需要能与你的 LAN 沟通才行!
# 在这个地方如果你随便设定后,记得使用底下的指令重新设定你的网络
# /etc/init.d/network restart


3.网络参数综合指令: ip

这个指令功能很多,基本上整合了 ifconfig 与 route 这两个指令。

[root@www ~]# ip [option] [动作] [指令]
选项与参数:
option :设定的参数,主要有:
-s :显示出该装置的统计数据(statistics),例如总接受封包数等;
动作:亦即是可以针对哪些网络参数进行动作,包括有:
link  :关于装置 (device) 的相关设定,包括 MTU, MAC 地址等等
addr/address :关于额外的 IP 协议,例如多 IP 的达成等等;
route :与路由有关的相关设定


4.无线网络: iwlist, iwconfig

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


5.手动使用 DHCP 自动取得 IP 参数: dhclient

[root@www ~]# dhclient eth0


立刻叫我们的网卡以 dhcp 协议去尝试取得 IP 。

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

ping 主要透过 ICMP 封包 来进行整个网络的状况报告,最重要的就是那个 ICMP type 0, 8 这两个类型, 分别是要求回报与主动回报网络状态是否存在的特性。

[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 最简单的功能就是传送 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 数值,如果你的主机与待侦测主机并不在同一个网域内, 那么 TTL 预设使用 255 ,如果是同一个网域内,那么 TTL 预设则使用 64.

time=15.4 ms:响应时间,单位有 ms(0.001秒)及 us(0.000001秒), 一般来说,越小的响应时间,表示两部主机之间的网络联机越良好!


1.用 ping 追踪路径中的最大 MTU 数值

透过 ping 传送一个大封包, 并且不许中继的路由器或 switch 将该封包重组,可追踪整个网络传输的最大 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 太大了。


注意,由于 IP 封包表头 (不含 options) 就已经占用了 20 bytes ,再加上 ICMP 的表头有 8 bytes ,所以当然你在使用 -s size 的时候,那个封包的大小就得要先扣除 (20+8=28) 的大小了。 因此如果要使用 MTU 为 1500 时,就得要下达『 ping -s 1472 -M do xx.yy.zz.ip 』才行!

三.两主机间各节点分析: 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 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 预设使用 UDP 封包,如果你想尝试使用其他封包, 那么 -I 或 -T 可以试看看

四.察看本机的网络联机与后门: 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 每五秒更新一次网络状态的显示;


网络联机状态的输出部分主要分为底下几个大项:

Proto:该联机的封包协议,主要为 TCP/UDP 等封包;

Recv-Q:非由用户程序连接所复制而来的总 bytes 数;

Send-Q:由远程主机所传送而来,但不具有 ACK 标志的总 bytes 数, 意指主动联机 SYN 或其他标志的封包所占的 bytes 数;

Local Address:本地端的地址,可以是 IP (-n 参数存在时), 也可以是完整的主机名。使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差异。

Foreign Address:远程的主机 IP 与 port number

stat:状态栏,主要的状态含有:

ESTABLISED:已建立联机的状态;

SYN_SENT:发出主动联机 (SYN 标志) 的联机封包;

SYN_RECV:接收到一个要求联机的主动联机封包;

FIN_WAIT1:该插槽服务(socket)已中断,该联机正在断线当中;

FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的封包;

TIME_WAIT:该联机已挂断,但 socket 还在网络上等待结束;

LISTEN:通常用在服务的监听 port !可使用『 -l 』参数查阅。

# 范例三:秀出目前已经启动的网络服务
[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


# 范例四:观察本机上头所有的网络联机状态
[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
....(底下省略)....


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

关于主机名与 IP 的对应中,我们主要介绍的是 DNS 客户端功能的 dig 这个指令。不过除了这个指令之外, 其实还有两个更简单的指令,那就是 host 与 nslookup。

[root@www ~]# host [-a] hostname [server]
选项与参数:
-a :列出该主机详细的各项主机名设定数据
[server] :可以使用非为 /etc/resolv.conf 的 DNS 服务器 IP 来查询。

# 范例一:列出 tw.yahoo.com 的 IP
[root@www ~]# host tw.yahoo.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


[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
Server:         168.95.1.1
Address:        168.95.1.1#53

Non-authoritative answer:
www.google.com  canonical name = www.l.google.com.
Name:   www.l.google.com
Address: 74.125.71.106
....(底下省略)....

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

1.1.95.168.in-addr.arpa name = dns.hinet.net.


六.远程联机指令与实时通讯软件

1.终端机与 BBS 联机: telnet

telnet 本身的数据在传送的时候是使用明码 (原始的数据,没有加密) , 所以数据在 Internet 上面跑的时候,会比较危险一点。

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

# 范例一:连结到台湾相当热门的 PTT BBS 站 ptt.cc
[root@www ~]# yum install telnet  <==默认没有安装这软件
[root@www ~]# telnet ptt.cc
欢迎来到 批踢踢实业坊 目前有【100118】名使用者与您一同对抗炎炎夏日。

请输入代号,或以 guest 参观,或以 new 注册:
[高手召集令] 台湾黑客年会 暑假与你骇翻南港 http://reg.hitcon.org/hit2011 要学计算机,首选台湾大学信息训练班!  http://tinyurl.com/3z42apw[/code] 

2.FTP 联机软件: ftp, lftp

[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 软件的使用


lftp (自动化脚本):

lftp 预设使用匿名登录 FTP 服务器,可以使用类似网址列的方式取得数据, 使用上比单纯的 ftp 要好用些。此外,由于可在指令列输入账号/密码,可以辅助进行程序脚本的设计。

[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:~>


如果你想要定时的去捉下昆山科大 FTP 网站下的 /pub/CentOS/RPM-GPG* 的档案时,那么那个脚本应该要怎么写呢? 我们尝试来写写看吧!

# 使用档案配合 lftp 去处理时:
[root@www ~]# mkdir lftp; cd lftp
[root@www lftp]# vim lftp.ksu.sh
open ftp.ksu.edu.tw
cd /pub/CentOS/
mget -c -d RPM-GPG*
bye
[root@www lftp]# lftp -f lftp.ksu.sh
[root@www lftp]# ls
lftp.ksu.sh      RPM-GPG-KEY-CentOS-3 RPM-GPG-KEY-CentOS-4 RPM-GPG-KEY-CentOS-6
RPM-GPG-KEY-beta RPM-GPG-KEY-centos4  RPM-GPG-KEY-CentOS-5

# 直接将要处理的动作加入 lftp 指令中
[root@www lftp]# vim lftp.ksu.sh
lftp -c "open ftp.ksu.edu.tw
cd /pub/CentOS/
mget -c -d RPM-GPG*
bye"
[root@www lftp]# sh lftp.ksu.sh


若为非匿名登录时,则可以使用『 open -u username,password hostname 』修改 lftp.ksu.sh 的第一行! 如果再将这个脚本写入 crontab 当中,你就可以定时的以 FTP 进行上传/下载的功能啰!

七.文字接口网页浏览

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[/code] 
如果是浏览 Linux 本机上面的网页档案,那就可以使用如下的方式:

[root@www ~]# links /usr/share/doc/HTML/index.html


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


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  eta 7s


不必透过浏览器,只要知道网址后,立即可以进行档案的下载, 又快速又方便.

八.封包撷取功能

文字接口封包撷取器: tcpdump

图形接口封包撷取器: wireshark

任意启动 TCP/UDP 封包的埠口联机: nc, netcat
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: