Linux常用的网络指令-linux鸟哥的私房菜服务器篇05(阅读笔记)
5.1 网络参数设定使用的指令
ifconfig 查询、设定路由与IP网域等相关参数
ifup,ifdown 使用/etc/sysconfig/network-scrips/底下对应的文件的设定启动某个网络接口
route 查询、设定路由表
ip 复合式的指令,可以替代上述所有功能
5.1.1 手动、自动设定与启动、关闭IP的参数:ifconfig、ifup、ifdown
ifconfig
范例一:观察所有网络接口(ifconfig)
# ifconfig ----列出目前所有启动的网络接口
范例二:暂时修改网络接口。给与eth0一个192.168.100.100/24的参数
# ifconfig eth0 192.168.100.100 ----系统会依照IP所在的class范围自动计算出子网掩码
# ifconfig eth0 192.168.100.100 netmask 255.255.255.0 mtu 8000 ----也可以自定义子网掩码
# ifconfig eth0 mtu 9000 ----就修改NTU,其它保持不动
# ifconfig eth0:0 192.168.50.50 ----在一张实体网卡上仿真出一个网络接口(一张网卡可以有多个IP)
# ifconfig eth0:0 down ----关闭eth0上仿真出的第一个网络接口,不影响eth0
范例三:将手动的处理全部取消,使用原有的设定值重建网络参数
# /etc/init.d/network restart ----刚刚设定的数据全部失效,会以ifcg-ethX设定为主
ifup,ifdown
# ifup eth0 ----根据配置文件的设定启动eth0这个网络接口
# ifdown eth0 ----如果配置文件被修改了将无法用法这个来关闭,因为这个程序会比对启动的eht0的设定与内存中当前的状态,不相同则不执行关闭动作(可以通过ifconfig关闭)
5.1.2 路由修改
route 两部主机间一定要有路由才能够互通TCP/IP协议,否则就无法联机
-n: 不要使用通讯协议或主机名,直接使用IP或port number
-ee: 使用更加详细的信息来显示
(add/del路由的相关参数)
-net: 表示后面接的路由为一个网域
-host: 表示后面接的为连接到但不主机的路由
-netmask: 与网域有关,可以设定netmask决定网域的大小
gw: gateway的简写,后续接的是IP的数值,与dev不同
dev: 如指定由哪一块网卡联机出去,后面接eth0d
范例一:单纯地观察路由状态
注意:路由表每一条都对应一个存在的网域,罗列顺序是小网域->大网域->预设路由
# route -n ----主机名用IP替代
# route ----预设会试图找出IP的主机名,因此会较上一个指令慢一点
---------------------------------------------------------------------------------------
| Destination: 这个路由的network;
| Gateway: 通过哪个网关可以到达这个网域,如果显示0.0.0.0表示透过局域网的MAC直接传送
| Flags:
| U: 该路由是启动的(route is up)
| H: 目标是一部主机而非网域(target is a host)
| G: 需要透过外部的主机来转递封包,即需要通过网关(use gateway)
| R: 使用动态路由时,恢复路由信息的旗标(reinstate route for dynamic routing)
| D: 已经由服务或转port功能设定为动态路由
| M: 路由已经被修改了
| !: 这个路由将不会被接受(用来抵挡不安全的网域)
| lface: 这个路由转递封包的接口
-----------------------------------------------------------------------------------------
范例二:路由的增加与删除
注意:添加的路由信息的网关必须是能直接使用MAC互通的
# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0 ----删掉这个网域,需要将路由上出现的参数都写入
# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0 ----增加一条路由
5.1.3 网络参数综合指令:ip
1. 关于装置接口(device)的相关设定:ip link
范例一:显示网络接口信息
# ip link show ----显示所有接口信息,相当于ifconfig
# ip -s link show eht0 ----显示eht0这个网卡的详细信息
范例二:启动、关闭与设定装置的相关信息
# ip link set eth0 up ----启动eth0这个网络接口
# ip link set eth0 down ----关闭这个接口
# ip link set eht0 mtu 1000 ----更改eth0的MTU的值,达到1000bytes
范例三:修改网络卡代号、MAC等参数
# ip link set eth0 down ----先关闭eth0这个接口
# ip link set eth0 name vbird ----重新设定这个网卡的代号(为了避免有问题,最好别改)
# ip link show ----观察一下
2. 关于额外的IP相关设定:ip address
范例一:显示出所有接口之IP参数
# ip address show
范例二:新增一个接口,名称假设为eth0:vbird
# ip address add 192.168.50.50/24 broadcast + dev eht0 label eth0:vbird
# ip address show eth0 ----看看有没有新增那个新的接口
# ifconfig ----这个指令当然也能够看到
# ip address del 192.168.50.50/24 dev eth0 ----删除就比较简单
3. 关于路由的相关的设定
范例一:显示目前的路由资料
# ip route show ----显示目前的路由资料,proto(此路由的路由协议)、scope(路由的范围)
范例二:增加路由,主要是本机直接可沟通的网域
# ip route add 192.168.5.0/24 dev eth0 ----针对本机所在的网域设定好路由,不需要透过router
# ip route show ----看看是否新增
范例三:增加可以通往外部的路由
# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0 ----via:从那个网关出去,不一定需要,dev:由哪个装置出去
范例四:增加预设路由
# ip route add default via 192.168.1.254 dev eth0 ----系统只需要一个预设路由就可以
范例五:删除路由
# ip route del 192.168.10.0/24
# ip route del 192.168.5.0/24
5.1.4 无线网络
iwlist 利用无线网卡进行无线AP的侦测与取得相关的数据
iwconfig 设定无线网卡的相关参数
5.1.5 手动使用DHCP自动取得IP参数:dhclient
# dhclient eth0 ----立即叫我们的网络卡以dhcp协议去尝试取得IP
5.2 网络侦错与观察指令
5.2.1 两部主机两点沟通:ping,用ping追踪路径中的最大MTU数值
范例一:侦测一下168.95.1.1这部DNS主机是否存在
ping -c 3 168.95.1.1 ----侦测一下168.95.1.1这不DNS主机是否存在
# vim /root/bin/ping.sh ----用ping侦测整个网域的主机名的响应。每部主机的侦测仅等待1秒,也仅侦测一次【SHEEL 7】
范例二:找出最大的MTU数值
注意:-s 后指定的大小不包括IP封包表头的20bytes以及ICMP封包表头的8bytes,因此如果要发送1500bytes的ICMP封包,-s后跟的应该是1472 bytes,常见接口的MTU预设值
-------------------------------------------------------------
| 网络接口 | MTU (byte) |
-------------------------------------------------------------
| Ethernet | 1500 |
| PPPoE | 1492 |
| Dial-up(Modem) | 576 |
-------------------------------------------------------------
# ping -c 2 -s 1000 -M do 192.168.1.254 ----发送ICMP封包2个,每个8000bytes,封包不能重新封包与打包(如果有响应,表示这个封包可以接受,否则表示这个封包太大了)
# ping -c 2 -s 8000 -M do 192.168.1.254 ----本地端MTU设定大小为1500,所以这个指令会出错
5.2.2 两主机各节点分析:traceroute
traceroute [选项与参数] IP
------------------------------------------------------------------------------------------------------------------
|选项与参数:
| -n: 不进行主机名的解析,单纯使用IP。速度较快
| -U: 使用UDP的port 33434来进行侦测,这是预设的侦测协议
| -I: 使用ICMP的方式进行侦测
| -T: 使用TCP进行侦测,一般使用port 80(因为利用ICMP和UDP的攻击太多,用户TCP侦测会顺利一些)
| -w: 若对方在几秒内没有回声就宣告不治,预设5秒
| -p [port]: 如果不想使用UDP或TCP的预设端口,可以通过这个参数修改
| -i [装置]: 主机上网络接口很多是,用这个参数指定网络接口
| -g [路由]: [路由]指的是网关的IP
------------------------------------------------------------------------------------------------------------------
范例一:侦测本机到yahoo的各节点联机状态
# traceroute -n tw.yahoo.com ----针对欲连接的目的地之间的所有节点进行UDP的回声等待,并侦测恢复的时间,每个节点侦测三次,回传***代表这个节点设置了防护措施,仅支持转递封包,不支持各种侦测
# traceroute -w 1 -n -T tw.yahoo.com ----回声等待仅1秒,不解析主机名,使用TCP封包
5.2.3 查看本机的网络联机与后门:netstat
# netstat -[antulpc] ----与网络接口有关的参数
# netstat -[rn] ----与路由有关的参数
------------------------------------------------------------------------------------------------------------------
|与路由有关的参数说明:
| -r: 列出路由表(route tasble),功能如同route这个指令
| -n: 不使用主机名与服务名称,使用IP与port number,如同route -n
|与网络接口有关的参数说明:
| -a: 列出所有的联机状态,包括tcp/udp/unix socket
| -t: 仅列出TCP封包的联机状态
| -u: 仅列出UDP封包的联机
| -l: 仅列出有在监听的服务之网络状态
| -p: 列出PID与program的档名
| -c: 可以设定几秒钟后自动更新一次,例如-c 5每五秒更新一次网络的状态的显示
------------------------------------------------------------------------------------------------------------------
范例一:列出目前的路由表状态
# netstat -rn <==># route -n ----不解析主机名和服务名称
范例二:列出目前所有的网络联机状态,使用IP与port number
# netstat -an
---------------------------------------------------------------------------------------------------------------
| Proto: 该联机的封包协议,主要为TCP/IP等封包
| Recv-Q: 非由用户程序连接所复制而来得总bytes数
| Send-Q: 由远程主机所传送过来且不具有ACK标志的总bytes数,也就说主动联机SYN或其他标志的封包所占的bytes
| Local Address: 本地端的地址,可以是IP也可以是主机名
| Foreign Address: 远程主机的IP与端口
| stat: 状态栏
| ESTABLISED: 已建立联机的状态
| SYN_SENT: 发动主动联机的联机封包
| SYN_RECV: 接收到一个要求联机的主动联机封包
| FIN_WAIT1: 该插槽服务(socket)已中断,该联机正在断线中
| FIN_WAIT2: 该联机已挂断,但正在等待对方主机响应短线确认的封包
| TIME_WAIT: 该联机已挂断,但socket还在网络上等待结束
| LISTEN: 通常用在服务的监听port!可使用-l参数查阅
-------------------------------------------------------------------------------------------------------------
范例三:显示目前已经启动的网络服务
注意:服务名称与端口的对应在/etc/services这个档案中设定
# netstat -tulnp
5.2.4 侦测主机名与IP对应:host,nsloopup
host [-a] hostname [server] 这个指令可以查出某个主机名的IP
------------------------------------------------------------------------------------
| -a: 列出该主机详细的各项主机名设定数据
| [service]: 可以使用/etc/resolv.conf设定的DNS以外的DNS服务器IP来查询
------------------------------------------------------------------------------------
范例一:列出tw.yahoo.com的IP
# host tw.yahoo.com ----使用/etc/resolv.conf设定的DNS查询IP
# host tw.yahoo.com 168.95.1.1 ----使用指定的DNS 168.95.1.1查询yahoo的IP
nslookup [-query=[type]] [hostname|IP]
---------------------------------------------------------------
| -query=[type]: 查询的类型
---------------------------------------------------------------
范例一:找出www.google.com的IP
# nslookup www.google.com
范例二:找出168.95.1.1的主机名
# nslookup 168.95.1.1
5.3 远程联机指令与实施通讯软件
5.3.1 终端机与BBS联机:telnet
telnet [host|IP [port]] 早期远程连接工具,问题是数据传送使用明码,没有加密
范例一:连结到台湾相当热门的PPT BBS站ptt.cc
# yum install telnet ----默认没有安装这个软件
# telnet ptt.cc ----用telnet连接到BBS
范例二:侦测本机端110这个port是否正确而启动
# telnet localhost 110
# telnet localhost 25 ----预设port 25是本机接口所提供的电子邮件服务
5.3.2 FTP联机软件:ftp,lftp(自动化脚本)
ftp [host|ip] [port] 处理FTP服务器的下载数据
范例一:联机到昆山科大看看
# yum install ftp
# ftp ftp.ksu.edu.tw ----登录到昆山科大,预设server port是21
220-Only anonymous FTP is allowed here ----这个FTP仅支持匿名
Name(ftp.ksu.edu.tw:root): anonymous ----使用匿名登录
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软件的使用
# ftp hostname 318 ----键入FTP服务器开启318端口,可以这样联机
lftp [-p port] [-u user[,pass]] [host|IP] 比单纯地ftp好用一些
# lftp -f filename
# lftp -c "commands"
--------------------------------------------------------------
|选项与参数:
| -p: 后面可以直接接上远程FTP主机提供的port
| -u: 后面接上账号和密码就能够远程连上主机了,没有密码会默认使用anonymous尝试匿名登录
| -f: 可以将指令写入脚本中,这样可以帮助进行shell scripts的自动化处理
| -c: 后米娜直接加上所需要的指令
-----------------------------------------------------------------
范例一:利用lftp登入昆山科大的FTP服务器
# yum install lftp
# lftp ftp.ksu.edu.tw
lftp ftp.ksu.edu.tw:~>| ----登入成功
范例二:取下昆山科大FTP网站下的/pub/CentOS/RPM-GPG*
# mkdir lftp;cd ;ftp
# vim lftp.ksu.sh_1 ----第一种脚本,使用脚本配合lftp【SHEEL 8】
# lftp -f lftp.ksu.sh_1 ----第一种脚本的运行方式(外部运行)
# ls ----
# vim lftp.ksu.sh_2 ----第二种脚本,直接将要处理的动作加入lftp指令中【SHEEL 9】
# sh lftp.ksu.sh_2 ----第二种脚本的启动方式
5.3.3 图形接口的实时通讯软件:pidgin(gaim的延伸)
5.4 文字接口网页浏览
5.4.1 文字浏览器:links
links [option] [URL]
----------------------------------------------------------
|选项与参数:
| -anoymous [0|1]: 是否使用匿名登录
| -dump [0|1]: 是否将网页的数据直接输出到standard out 而非links软件功能
| -dump_charset: 想要透过dump输出到屏幕的语系编码,big5使用cp950
------------------------------------------------------------
范例一:浏览呢Linux Kernel网站
# links http://www.kernel.org
范例二:浏览本机上面的网页档案
# links /usr/share/doc/HTML/index.html
范例三:抓取内容
# links -dump http://tw.yahoo.com > yahoo.html ----将这个网页的内容整个抓下来存储
# links -dump http://some.siet.name/web.php?name=usr$password=pw > testfile
5.4.2 文字接口下载器:wget
wget [option] [网址] 取得网页数据
-----------------------------------------------------------------------------------------
|选项与参数:
| --http-user=username
| --http-passwd=passwd ----若联机的网站有账号和密码的需求
| --quite: 不要显示wget在抓取数据时显示讯息
----------------------------------------------------------------------------------------
范例一:下载2.6.39的核心
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
# vim /etc/wgettrc ----设定代理服务器
#http_proxy = http://proxy.yoyodyne.cm:18023/
#ftp_proxy = http://proxy.yoyodyne.com:18023/
#use_proxy = on
改为
http_proxy = http://proxy.ksu.edu.tw:3128/
use_proxy = on
5.5 封包撷取功能
5.5.1 文字接口封包撷取器:tcpdump
tcpdump [-AennqX] [-i 接口] [-w 储存档名] [-c 次数] [-r 档案] 抓取封包的黑客软件
------------------------------------------------------------------------
|选项与参数:
| -A: 封包的内容以ASCLL显示,通常用来捉取WWW网页封包资料
| -e: 使用数据链路层(OSI第二层)的MAC封包数据来显示
| -nn: 直接以IP及port number显示,而非主机名与服务名称
| -q: 仅列出较为简短的封包信息,每一行的信息比较精简
| -X:可以列出十六进制(hex)以及ASCLL的封包内容,对于监听封包内容很有用
| -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 ----同事加上来源与目标的限制
| tcp port 21 ----针对通讯协议和端口
---------------------------------------------------------------------------
范例一:监听网络卡的封包
# tcpdump -i eth0 -nn ----以IP与port number 桌下eth0这个网络卡上的封包,持续3秒
17:01:47.362139 IP 192.168.1.100.22 > 192.168.1.101.1937:Flag [P.], seq 196:472, ack 1.
(该封包是由192.168.1.100传到192.168.1.101,透过的端口是22到1937,使用的是PUSH的旗标,而不是SYN之类的主动联机标志。)
【ctrl+c】结束抓取
# tcpdump -i eth0 -nn port 21 ----仅专区eht0这个网卡的21端口的封包
# tcpdump -i lo -nn ----监听lo这个接口
# ssh localhost ----从另一个终端ssh连接本机,看看有没有监听到三次握手的过程
范例二:用tcpdump在router上面监听明码传输的数据
# tcpdump -i lo -nn -X 'port 21' ----监听lo的21端口,并将监听到的封包数据以16进制:ASCALL列出
# ftp localhost ----tcp连接本机
范例三:监听eth0适配器的22端口,封包来源为192.168.1.101的封包
# tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.101'
5.5.2 图形接口封包撷取器:wireshark
# yum install wireshark wireshark-gnome ----yum安装图形接口
5.5.3 人已启动TCP/IP封包的端口联机:nc,netcat
nc 进行某些服务的检测,连接到某个端口进行沟通
注意:如果编译nc时给与GAPING_SECURITY_HOLE的参数,这个软件还可以取得客户端的bash,有的系统将nc改名为netget(/usr/share/doc/nc-1.84/scripts/)
# nc [-u] [IP|host] [port]
# nc -l [IP|host] [port]
------------------------------------------------------------------------------
| -l: 作为监听只用,亦即开启一个port来监听用户的联机
| -u: 不使用TCP而是使用UDP作为联机的封包状态
------------------------------------------------------------------------------
范例一:与telnet类似,连接本地端的port 25查阅相关信息
# yum install nc
# nc localhost 25
范例二:激活一个port 20000 来监听使用者的联机要求
# nc -l localhost 20000 & ----启动这个端口并放在后台执行
# netstat -tlunp | grep nc ----看看nc启动的这个端口的状态
# nc localhost 20000 ----下面就可以输入字符串了,这些输入会同事显示在服务器端
5.6 重点回顾【191】
5.7 本章习题
5.8 参考数据与延伸阅读