基础网络命令(17个)
telnet,ssh,sshpass,scp,wget,ping,route,ifconfig,ifup,ifdown,netstat,ss,rsync,ip,ethtool,mii-tool,brctl
深入网络命令(12个)
nmap,lsof,mail,mutt,nslookup,dig,host,traceroute,tcpdump,starce,curl,elinks
9.1.telnet
功能:执行telnet指令开启终端机阶段作业,并登入远端主机
语法格式:telnet[参数][主机]
常用选项:
-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e<脱离字符> 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定"-F"参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l<用户名称> 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n<记录文件> 指定文件记录相关信息。
-r 使用类似rlogin指令的用户界面。
-S<服务类型> 设置telnet连线所需的IP TOS信息。
-x 假设主机有支持数据加密的功能,就使用它。
-X<认证形态> 关闭指定的认证形态。
示例:
1)远程服务器无法访问 [root@localhost ~]# telnet 192.168.19.35 rying 192.168.19.35... telnet: connect to address 192.168.19.35: Connection refused 说明: 处理这种情况方法: (1)确认ip地址是否正确? (2)确认ip地址对应的主机是否已经开机? (3)如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看) (4)如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行) (5)如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看) 2)域名无法解析 [root@localhost ~]# telnet www.baidu.com www.baidu.com/telnet: Temporary failure in name resolution 说明: 处理这种情况方法: (1)确认域名是否正确 (2)确认本机的域名解析有关的设置是否正确(/etc/resolv.conf中nameserver的设置是否正确,如果没有,可以使用nameserver 8.8.8.8) (3)确认防火墙是否放开了UDP53端口的访问(DNS使用UDP协议,端口53,使用iptables-save查看) 3)其他情况 [root@localhost ~]# telnet 192.168.120.206 Trying 192.168.120.206... telnet: connect to address 192.168.120.206: Connection refused telnet: Unable to connect to remote host: Connection refused 说明: 处理这种情况: (1)确认ip地址或者主机名是否正确? (2)确认端口是否正确,是否默认的23端口 4)启动服务及配置 启动telnet服务 service xinetd restart 说明: 配置参数,通常的配置如下: service telnet { disable = no #启用 flags = REUSE #socket可重用 socket_type = stream #连接方式为TCP wait = no #为每个请求启动一个进程 user = root #启动服务的用户为root server = /usr/sbin/in.telnetd #要激活的进程 log_on_failure += USERID #登录失败时记录登录用户名 } 如果要配置允许登录的客户端列表,加入 only_from = 192.168.0.2 #只允许192.168.0.2登录 如果要配置禁止登录的客户端列表,加入 no_access = 192.168.0.{2,3,4} #禁止192.168.0.2、192.168.0.3、192.168.0.4登录 如果要设置开放时段,加入 access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务(我们的上班时间:P) 如果你有两个IP地址,一个是私网的IP地址如192.168.0.2,一个是公网的IP地址如218.75.74.83,如果你希望用户只能从私网来登录telnet服务,那么加入 bind = 192.168.0.2 各配置项具体的含义和语法可参考xined配置文件属性说明(man xinetd.conf) 配置端口,修改services文件: # vi /etc/services 找到以下两句 telnet 23/tcp telnet 23/udp 如果前面有#字符,就去掉它。telnet的默认端口是23,这个端口也是***端口扫描的主要对象,因此最好将这个端口修改掉,修改的方法很简单,就是将23这个数字修改掉,改成大一点的数字,比如61123。注意,1024以下的端口号是internet保留的端口号,因此最好不要用,还应该注意不要与其它服务的端口冲突。 启动服务: service xinetd restart 实例:正常telnet 命令: telnet 192.168.120.204 输出: [root@andy ~]# telnet 192.168.120.204 Trying 192.168.120.204... Connected to 192.168.120.204 (192.168.120.204). Escape character is '^]'. localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1) login: root Password: Login incorrect 说明: 一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su -切到root用户。
9.2.ssh
功能:SSH客户端
常用选项:
-p 指定远程主机端口
-i 指定认证文件
-L [bind_address:]port:host:hostport
-R [bind_address:]port:host:hostport]
-D [bind_address:]port
-o SSH 选项,有以下几个比较常用的: ConnectionAttempts=NUM 连接失败后重试次数 ConnectTimeout=SEC 连接超时时间 StrictHostKeyChecking=no 自动拉去主机 key 文件 PasswordAuthentication=no 禁止密码认证
示例:
登录到远程主机: # ssh [email protected] 远程主机执行命令: # ssh [email protected] 'ifconfig' 本地文件内容写到远程主机文件: # ssh [email protected] 'cat >> file' < /etc/passwd SSH 还提供了一个非常有用的功能,就是端口转发,能帮你解决一些无法建立的连接。
9.3.sshpass
功能:非交互SSH登录(需要安装)
常用选项:
-f 从文件中获取密码
-d 用数字文件描述符获取密码
-p 密码作为参数
-e 密码作为环境变量传递,变量名是SSHPASS
示例:
免交互SSH登录: # sshpass -p 123456 ssh [email protected] 免交互传输文件: # sshpass -p 123456 scp a.txt 192.168.1.10:/root 密码传入系统变量: # SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" [email protected]:/opt
9.4.scp
功能:通货ssh协议进行安全远程服务器的文件复制
语法:scp [OPTIONS] file_source file_target
帮助命令:
scp --help
man scp
常用选项:
-C 压缩选项
-i 指定私钥文件
-l 限制速率,单位Kb/s,1024Kb=1Mb
-P 指定远程主机SSH端口
-p 保存修改时间、访问时间和权限
-r 递归拷贝目录
-o SSH选项,有以下常用的:
ConnectionAttempts=NUM 连接失败后重试次数
ConnectTimeout=SEC 连接超时时间
StrictHostKeyChecking=no 自动拉去主机key文件
PasswordAuthentication=no 禁止密码认证
-v:跟多数命令中-v一样,用来显示详细信息
示例:
[root@localhost ~]# scp system.sh [email protected]:/root #本地复制文件到远程,并指定远程以root登录 The authenticity of host '192.168.19.51 (192.168.19.51)' can't be established. RSA key fingerprint is 14:1a:ee:3c:8c:14:6d:4a:fd:d8:c7:c6:ea:87:0c:de. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.19.51' (RSA) to the list of known hosts. [email protected]'s password: system.sh 100% 7273 7.1KB/s 00:00 [root@localhost ~]# scp dir001 [email protected]:/root #复制目录不加参数就会报错 \[email protected]'s password: dir001: not a regular file [root@localhost ~]# scp -r dir001 [email protected]:/root #所以加-r目录才会复制过去 [email protected]'s password: [root@localhost ~]#
说明:举几个常用的例子,其他参数后续再完善
9.5.wget
功能:非交互式网络下载
语法:wget [option]... [URL]...
常用选项:
启动:
-b, --background 转入 后台运行
-V, –version 打印wget版本
-h,help 打印语法帮助
e, –execute=COMMAND 执行`.wgetrc’格式的命令
日志记录和输入文件:
-o, --output-file=FILE 把记录写到FILE文件
-a, --append-output=FILE 把记录追加到FILE文件中
-d, --debug 打印调试输出,会包含头信息
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
-q, --quiet 退出
-i, --input-file=FILE 从文件中读取URL下载
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
下载:
--bind-address=ADDRESS 设置绑定地址(主机名或IP,当本地有多个IP或名字时使用)
-t, --tries=NUMBER 设置链接重试次数(0 表示无限制)
-O, --output-document=FILE 把文档写到FILE文件中
-nc, --no-clobber 跳过下载现有的文件
-c, --continue 断点续传
--progress=TYPE 设置进度条(dot和bar)
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, --server-response 打印服务器响应
--spider 不下载任何内容
-T, --timeout=SECONDS 设置相应超时时间(还有--dns-timeout、--connect-timeout和--read-timeout)
-w, --wait=SECONDS 两次重试间隔等待时间
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
--limit-rate=RATE 限制下载速度
--user=USER 设置ftp和http用户名
--password=PASS 设置ftp和http密码
目录:
-nd –no-directories 不创建目录
-x, –force-directories 强制创建目录
-nH, –no-host-directories 不创建主机目录
-P, --directory-prefix=PREFIX 保存文件目录
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
HTTP选项:
--http-user=USER 设置http用户名
--http-password=PASS 设置http密码
-C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E, –html-extension 将所有text/html文档以.html扩展名保存
–ignore-length 忽略 `Content-Length’头域
--proxy-user=USER 设置代理用户名
--proxy-password=PASS 设置代理密码
--referer=URL 设置Referer
-s,--save-headers 保存头到文件
--default-page=NAME 改变默认页面名字,默认index.html
-U,--user-agent=AGENT 设置客户端信息
--no-http-keep-alive 禁用HTTP keep-alive(长连接)
--load-cookies=FILE 从文件加载cookies
--save-cookies=FILE 保存cookies到文件
--post-data=STRING 使用POST方法,发送数据
FTP选项:
--ftp-user=USER 设置ftp用户名
--ftp-password=PASS 设置ftp密码
--no-passive-ftp 禁用被动传输模式
-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打开或关闭文件名的 globbing机制
–passive-ftp 使用被动传输模式 (缺省值).
–active-ftp 使用主动传输模式
–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
递归下载:
-r, --recursive 指定递归下载,慎用!
-l, --level=NUMBER 最大递归深度, (inf 或 0 代表无穷).
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr.
-p, –page-requisites 下载显示HTML文件的所有图片
递归下载中的包含和不包含(accept/reject)
-A, --accept=LIST 逗号分隔下载的扩展列表
-R, --reject=LIST 逗号分隔不被下载的扩展列表
-D, --domains=LIST 逗号分隔被下载域的列表
--exclude-domains=LIST 排除不被下载域的列表
–follow-ftp 跟踪HTML文档中的FTP链接
–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –span-hosts 当递归时转到外部主机
-L, –relative 仅仅跟踪相对链接
-I, –include-directories=LIST 允许目录的列表
-X, –exclude-directories=LIST 不被包含目录的列表
-np, –no-parent 不要追溯到父目录
示例:
[root@localhost ~]# wget http://nginx.org/download/nginx-1.9.9.tar.gz #下载单个文件到当前路径 [root@localhost ~]#wget -b http://nginx.org/download/nginx-1.9.9.tar.gz #放在后台下载 对于网络不稳定的用户使用-c和--tries参数,保证下载完成,并下载到指定目录: [root@localhost ~]# wget -t 3 -c http://nginx.org/download/nginx-1.9.9.tar.gz -P down ##对于网络不稳或者其他原因,使用-c 和--tries,保证下载完成,并下载到指定的路径 [root@localhost scripts]# wget http://www.baidu.com/index.html -O index.html #下载内容到文件 [root@localhost scripts]# ls index.html index.html [root@localhost scripts]# cat > url https://www.baidu.com/index.html ^C [root@localhost scripts]# wget -i url #从文件读取url下载
9.6.ping
功能:发送目标主机ICMP的网络请求
常用选项:
-b:允许ping广播地址
-c:次数
-i:指定收发信息的间隔时间
-s:字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节
-t: 设置存活数值ttl的大小
示例:
#ping通情况 [root@localhost ~]# ping 192.168.19.1 PING 192.168.19.1 (192.168.19.1) 56(84) bytes of data. 64 bytes from 192.168.19.1: icmp_seq=1 ttl=128 time=0.120 ms #ping不通情况 [root@localhost ~]# ping 192.168.19.3 PING 192.168.19.3 (192.168.19.3) 56(84) bytes of data. From 192.168.19.20 icmp_seq=1 Destination Host Unreachable #ping网关 [root@localhost ~]# ping -b 192.168.19.2 PING 192.168.19.2 (192.168.19.2) 56(84) bytes of data. 64 bytes from 192.168.19.2: icmp_seq=1 ttl=128 time=0.131 ms #ping指定次数 [root@localhost ~]# ping -c 3 192.168.19.1 #不加-c会一直ping下去 PING 192.168.19.1 (192.168.19.1) 56(84) bytes of data. 64 bytes from 192.168.19.1: icmp_seq=1 ttl=128 time=0.125 ms 64 bytes from 192.168.19.1: icmp_seq=1 ttl=128 time=0.125 ms 64 bytes from 192.168.19.1: icmp_seq=1 ttl=128 time=0.125 ms #ping指定时间跟次数 [root@localhost ~]# ping -c 3 -i 0.2 192.168.19.2 PING 192.168.19.2 (192.168.19.2) 56(84) bytes of data. 64 bytes from 192.168.19.2: icmp_seq=1 ttl=128 time=0.054 ms #ping域名 [root@localhost ~]# ping www.baidu.com PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data. 64 bytes from 14.215.177.38: icmp_seq=1 ttl=128 time=8.71 ms #-s -t参数使用 [root@localhost ~]# ping -i 0.2 -s 1024 -t 255 192.168.19.2 PING 192.168.19.2 (192.168.19.2) 1024(1052) bytes of data. 1032 bytes from 192.168.19.2: icmp_seq=1 ttl=128 time=0.078 ms 说明:-i 0.2 发送周期为0.2秒 -s 设置发送包的大小为1024 -t 设置TTL值为 255
9.7.route
功能:打印设置路由表
常用选项:
-n:不使用通讯协定或主机名称,直接使用 IP 或 port number;
-ee:显示更详细的信息
增加 (add) 与删除 (del) 路由的相关参数:
-net :添加到网络的路由
-host :添加到主机的路由
netmask :子网掩码设置
gw :下一跳地址
dev :下一跳网络接口,后面接 eth0 等
示例:
#查看本机路由表 [root@localhost ~]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.19.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 192.168.19.2 0.0.0.0 UG 0 0 0 eth1 [root@localhost ~]# route -n Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.19.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.19.2 0.0.0.0 UG 0 0 0 eth0 #添加到主机的路由 [root@localhost ~]# route add -host 192.168.6.1 dev eth0 [root@localhost ~]# route add -host 192.168.6.12 gw 192.168.6.1 #添加到网络的路由 [root@localhost ~]# route add -net 192.168.6.1 netmask 255.255.255.0 eth0 [root@localhost ~]# route add -net 192.168.6.1 netmask 255.255.255.0 eth0 gw 192.168.6.2 [root@localhost ~]# route add -net 192.168.6.1/24 #添加默认网关 [root@localhost ~]# route add default gw 1.1.1.2 #删除路由 [root@localhost ~]# route del -host 192.168.6.1 dev eth0 [root@localhost ~]# route del -net 192.168.6.1 netmask 255.255.255.0 eth0 [root@localhost ~]# route del default gw 1.1.1.2
9.8.ifconfig
功能:配置网络接口
语法:ifconfig [interface]
ifconfig interface [aftype] options | address ...
常用选项:
up:启用网卡
down:停用网卡
-a:显示所有网卡信息
示例:
[root@localhost ~]# ifconfig eth0 #显示指定网卡信息 [root@localhost ~]# ifconfig eth0 down #停用网卡,eth0信息不显示了
#eth0启用又显示了 [root@localhost ~]# ifconfig -a #显示所有网卡信息 [root@localhost ~]# ifconfig eth0:0 192.168.10.1/24 设置临时网卡
9.9.ifup/ifdown(慎用)
功能:启动和关闭网卡
语法格式:
ifupIFACE [boot]
ifdownIFACE
示例:
重启指定网卡服务 [root@oldboy ~]# ifdown # 需要指定网卡 usage: ifdown[root@oldboy ~]# ifdown eth0 && ifup eth0 # 一定要连在一起使用!!切记啊 Determining if ip address 192.168.91.130 is already in use for device eth0... 注意:以上命令尽量少用,如果一定要使用请将两者连在一起使用,不能单独使用。 原因:生产环境中,我们的服务器都是放在机房,没有在办公室;如果关闭了网卡,那就可能不能连接服务器了。到时你就麻烦了………………。 重启所有网卡服务 [root@oldboy ~]# /etc/init.d/network restart # 重启网卡服务 这个是重启所有网卡服务,不能操作指定网卡 命令所在位置和类型 [root@oldboy ~]# which ifup /sbin/ifup [root@oldboy ~]# which ifdown /sbin/ifdown [root@oldboy ~]# type ifup ifup is hashed (/sbin/ifup) [root@oldboy ~]# type ifdown ifdown is hashed (/sbin/ifdown)
9.10.netstat
功能:打印网络连接、路由表、接口统计信息、伪装连接和多播成员
常用选项:
-r 显示路由表
-i 显示接口表
-n 不解析名字
-p 显示程序名 PID/Program
-l 显示监听的socket
-a 显示所有socket
-o 显示计时器
-Z 显示上下文
-t 只显示tcp连接
-u 只显示udp连接
-s 显示每个协议统计信息
示例:
[root@localhost ~]# netstat -tlunap #显示所有监听端口 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 897/sshd tcp 0 96 192.168.19.54:22 192.168.19.1:7024 ESTABLISHED 15148/sshd tcp 0 0 192.168.19.54:22 192.168.19.1:7023 ESTABLISHED 15129/sshd tcp 0 0 :::22 :::* LISTEN 897/sshd tcp 0 0 :::80 :::* LISTEN 13764/httpd [root@localhost ~]# netstat -tlnap #显示所有tcp连接 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 897/sshd tcp 0 0 192.168.19.54:22 192.168.19.1:7024 ESTABLISHED 15148/sshd tcp 0 0 192.168.19.54:22 192.168.19.1:7023 ESTABLISHED 15129/sshd tcp 0 0 :::22 :::* LISTEN 897/sshd tcp 0 0 :::80 [root@localhost ~]# netstat -ulnap #显示所有udp连接,目前没有udp连接,所以为空 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name [root@localhost ~]# netstat -tlunp |grep 22 #过滤22监听端口 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 965/sshd tcp 0 0 :::22 :::* LISTEN 965/sshd [root@localhost ~]# netstat -rn #可以显示路由表信息 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.6.12 192.168.6.1 255.255.255.255 UGH 0 0 0 eth1 192.168.6.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 192.168.19.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 192.168.19.2 0.0.0.0 UG 0 0 0 eth1
9.11.ss
功能:ss是socket stawtistics的缩写,获取socket统计信息,可以显示和netstat类似的内容,但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
比netstat优势在于:
当服务器的socket连接数量变得非常大时,无论是netstat命令还是cat /proc/net/tcp,执行速度都会很慢。当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。
ss的秘诀在于:
利用了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,使得ss的快捷高效。系统如果没有tcp_diag,ss也可以正常运行,效率会变得稍慢,还是比netstat快。
语法:ss [options] [ FILTER ]
常用选项:
-n 不解析名字
-a 显示所有socket
-l 显示所有监听的socket
-o 显示计时器
-e 显示socket详细信息
-m 显示socket内存使用
-p 显示进程使用的socket
-i 显示内部TCP信息
-s 显示socket使用汇总
-4 只显示IPV4的socket
-0 显示包socket
-t 只显示TCP socket
-u 只显示UDP socket
-d 只显示DCCP socket
-w 只显示RAW socket
-x 只显示Unix域socket
-f FAMILY 只显示socket族类型( unix, inet,inet6, link, netlink)
-A 查询socket{all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D 将原始的TCP socket转储到文件
-F 从文件中读取过滤信息
过滤:
-o state 显示TCP连接状态信息
两种的命令延伸到的两种工具集比较:
用途 | net-tool | iproute2 |
地址和链路配置 | ifconfig | ip addr, ip link |
路由表 | route | ip route |
邻居 | arp | ip neigh |
VLAN | vconfig | ip link |
隧道 | iptunnel | ip tunnel |
组播 | ipmaddr | ip maddr |
统计 | netstat | ss |
示例:
#看看耗时 netstat -at 耗时15秒 ss -atr 没有tcp_diag耗时5秒 ss -atr 有tcp_diag耗时0.5秒 #netstat是net-tools工具中的一员 [root@localhost ~]# rpm -q net-tools net-tools-1.60-110.el6_2.x86_64 #ss是iproute工具中的一员 [root@localhost ~]# rpm -q iproute iproute-2.6.32-32.el6_5.x86_64 [root@localhost ~]# rpm -qf /usr/sbin/ss iproute-2.6.32-32.el6_5.x86_64 #安装iproute [root@localhost ~]#yum install iproute iproute-doc [root@localhost ~]# ss -t -a #显示所有tcp连接 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::ssh :::* LISTEN 0 128 *:ssh *:* LISTEN 0 511 :::http :::* ESTAB 0 0 192.168.19.54:ssh 192.168.19.1:7024 ESTAB 0 0 192.168.19.54:ssh 192.168.19.1:7023 [root@localhost ~]# ss -u -a #显示所有udp连接 State Recv-Q Send-Q Local Address:Port Peer Address:Port [root@localhost ~]# ss -s #显示所有socket Total: 287 (kernel 295) TCP: 6 (estab 2, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 2 Transport Total IP IPv6 * 295 - - RAW 0 0 0 UDP 0 0 0 TCP 5 3 2 INET 5 3 2 FRAG 0 0 0 [root@localhost ~]# ss -o state established #显示已经建立的连接 Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.19.54:ssh 192.168.19.1:7024 timer:(keepalive,25min,0) 0 96 192.168.19.54:ssh 192.168.19.1:7023 timer:(on,248ms,0) [root@localhost ~]# ss -o state TIME_WAIT #显示所有的timeout,这里没有的 ss: no socket states to show with such filter. #当前服务器的网络连接统计 [root@localhost ~]# ss -s Total: 283 (kernel 285) TCP: 3 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 1 Transport Total IP IPv6 * 285 - - RAW 0 0 0 UDP 0 0 0 TCP 3 2 1 INET 3 2 1 FRAG 0 0 0 说明:在服务器有大量socket连接时,使用这个命令做统计 #查看所有打开的网络端口 [root@localhost ~]# ss -l State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::ssh :::* LISTEN 0 128 *:ssh *:* 说明:使用pl参数,列出具体的程序名称 [root@localhost ~]# ss -pl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::ssh :::* users:(("sshd",965,4)) LISTEN 0 128 *:ssh *:* users:(("sshd",965,3)) 说明:socket连接属于sshd程序,sshd程序的PID是965 #查看所有的socket连接 [root@localhost ~]# ss -a State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::ssh :::* LISTEN 0 128 *:ssh *:* ESTAB 0 64 192.168.19.20:ssh 192.168.19.1:13342 tcp的sockets,用-ta udp的sockets,用-ua raw的sockets,用-wa unix的sockets,用-xa
9.12.rsync
功能:一种快速的、通用的、远程的(本地)文件复制工具,据说是scp速度的20倍
常用选项:
-v 显示复制信息
-q 不输出错误信息
-c 跳过基础效验,不判断修改时间和大小
-a 归档模式,等效-rlptgoD,保留权限、属组等
-r 递归目录
-l 拷贝软连接
-z 压缩传输数据
-e 指定远程shell,比如ssh、rsh
--progress 进度条,等同-P
--bwlimit=KB/s 限制速率,0为没有限制
--delete 删除那些DST中SRC没有的文件
--exclude=PATTERN 排除匹配的文件或目录
--exclude-from=FILE 从文件中读取要排除的文件或目录
--password-file=FILE 从文件读取远程主机密码
--port=PORT 监听端口
示例:
[root@localhost ~]# ls . /opt .: anaconda-ks.cfg dir003 dir006 dir009 install.log.syslog dir001 dir004 dir007 dir010 system.sh dir002 dir005 dir008 install.log /opt: #这个目录没有文件 [root@localhost ~]# rsync -av * /opt #把当前目录所有文件同步到opt目录下 sending incremental file list anaconda-ks.cfg install.log install.log.syslog system.sh dir001/ dir002/ dir003/ dir004/ dir005/ dir006/ dir007/ dir008/ dir009/ dir010/ sent 31002 bytes received 128 bytes 62260.00 bytes/sec total size is 30574 speedup is 0.98 [root@localhost ~]# ls /opt #现在有文件了 anaconda-ks.cfg dir003 dir006 dir009 install.log.syslog dir001 dir004 dir007 dir010 system.sh dir002 dir005 dir008 install.log [root@localhost ~]# rsync -av * 192.168.19.51:/opt #本地目录所有文件同步到远端 [root@localhost ~]# rsync -av --delete * 192.168.19.51:/opt #保持远程主机目录与本地一样
9.13.ip
功能:打印并设置路由、设备、策略路由和隧道配置信息
语法:语法十分复杂,这里不一一列举
通过ip组合衍生出好多命令
ip link 网络设备配置命令
ip addr 管理网络设备与协议,相对ip link,增加了对ip地址的管理
ip addrlabel ipv6的地址标签
ip route 管理路由
ip rule 管理路由策略
ip tunnel 隧道配置
ip maddr 多播地址管理
ip mroute 多播路由管理
ip monitor 状态监控
ip xfrm 设置xfrm,xfrm是一个ip框架
示例:
[root@localhost ~]# ip link show #查看默认网卡信息 1: lo:mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a0:3f:29 brd ff:ff:ff:ff:ff:ff [root@localhost ~]# ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a0:3f:29 brd ff:ff:ff:ff:ff:ff inet 192.168.19.54/24 brd 192.168.19.255 scope global eth0 inet6 fe80::20c:29ff:fea0:3f29/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]# ip addr show 跟ip addr显示没有什么区别 1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a0:3f:29 brd ff:ff:ff:ff:ff:ff inet 192.168.19.54/24 brd 192.168.19.255 scope global eth0 inet6 fe80::20c:29ff:fea0:3f29/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]# ip addr add dev eth0 192.168.11.1/24 label eth0:1 [root@localhost ~]# ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a0:3f:29 brd ff:ff:ff:ff:ff:ff inet 192.168.19.54/24 brd 192.168.19.255 scope global eth0 inet 192.168.10.1/24 brd 192.168.10.255 scope global eth0:0 inet 192.168.11.1/24 scope global eth0:1 添加临时网卡及ip,这里已经有显示 inet6 fe80::20c:29ff:fea0:3f29/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]# ip addr del dev eth0 192.168.10.1 #删除临时及网卡 [root@localhost ~]# ip addr flush eth0 #刷新网络设备 说明:ip地址也被清除了 [root@localhost ~]# ip route add 192.168.20.0/24 via 192.168.19.54 #设置一条静态路由 [root@localhost ~]# ip route show #查看已经生效了 192.168.20.0/24 via 192.168.19.54 dev eth0 192.168.19.0/24 dev eth0 proto kernel scope link src 192.168.19.54 169.254.0.0/16 dev eth0 scope link metric 1002 default via 192.168.19.2 dev eth0 [root@localhost ~]# ip route del 192.168.20.0/24 #删除刚刚设置的路由 [root@localhost ~]# ip route 192.168.19.0/24 dev eth0 proto kernel scope link src 192.168.19.54 169.254.0.0/16 dev eth0 scope link metric 1002 default via 192.168.19.2 dev eth0
9.14.ethtool
功能:查询和设置网络硬件信息
示例:
[root@localhost ~]# ethtool eth0 #查看网卡的工作模式等信息 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 1000Mb/s # ethtool -s eth0 speed 10 duplex half autoneg off #改成10M/s的速率,半双工,关闭自动协商 # ethtool -s eth0 speed 100 duplex full autoneg on #再改回来
9.15.mii-tool
功能:查看操作接口状态
示例:
[root@localhost ~]# mii-tool eth0 #查看网卡状态,以前的虚拟机里不支持,现在vmware的版本里是支持的 eth0: negotiated 100baseTx-FD, link ok #网卡连接ok # mii-tool eth0 eth0: no link --代表网线和网卡没连
9.16.brctl
功能:网桥工具
示例:
查看已有网桥 你也可以为 br0 设置一个IP,已访问这台机器。 [inbi@debian~]#ifconfig br0 10.10.1.1 netmask 255.255.0.0 up 删除网桥 [inbi@debian~]#brctl delif br0 eth0 eth1 #增加网桥中的接口 [inbi@debian~]#brctl delbr br0 #删除网桥 关闭生成树 [inbi@debian~]#brctl stp br0 off #关闭生成树协议,减少数据包污染,因为我这里只有一个路由器哦! 配置桥开机激活 [inbi@debian~]#echo "modprobe bridge">>/etc/rc.local #开机加载 bridge 模块,或者echo "bridge">>/etc/modules [inbi@debian~]#cp /etc/network/interfaces /etc/network/interfaces.default #备份下,方便以后使用啊! [inbi@debian~]#vim /etc/network/interfaces auto lo eth0 eth1 br0 iface lo inet loopback iface br0 inet static address 10.10.10.1 netmask 255.255.0.0 gateway 10.10.10.254 pre-up ip link set eth0 promisc on pre-up ip link set eth1 promisc on pre-up echo "1">/proc/sys/net/ipv4/ip_forward bridge_ports eth0 eth1 #配置eth0 eth1 br0开机启动,eth0,eth1未设置IP信息,在启动br0网卡时,开启了eth0,eth1的混杂模式,并桥接了它们。 centos 6配置网桥 1)在宿主机上创建一个桥接网络 # /etc/init.d/NetworkManager stop # chkconfig NetworkManager off # vim /etc/sysconfig/network-scripts/ifcfg-br0 --此文件不存在,br0这个名字是自定义的 DEVICE=br0 --名字对应好 TYPE=Bridge --这里的Birdge,B要大写,后面的irdge要小写 BOOTPROTO=static IPADDR=172.16.2.9 NETMASK=255.255.0.0 GATEWAY=172.16.1.1 ONBOOT=yes 2)把一个物理网卡加到一个桥接网络里,我这里是把eth0加到br0 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BRIDGE=br0 --这句就是把eth0桥接到br0 NM_CONTROLLED=no --这句就是让eth0不受networkmanager的控制 ONBOOT=YES [root@li ~]# brctl show --重启网络前的情况 bridge name bridge id STP enabled interfaces virbr0 8000.5254004e4c3f yes virbr0-nic virbr1 8000.5254004cf4e4 yes virbr1-nic 3)重启网络 /etc/init.d/network restart # brctl show --重启网络后查看的情况 bridge name bridge id STP enabled interfaces br0 8000.0030677653f7 no eth0 virbr0 8000.5254004e4c3f yes virbr0-nic virbr1 8000.5254004cf4e4 yes virbr1-nic
9.17.nmap
功能:网络探测工具,安全及端口扫描器
其基本功能有三个:
(1)是扫描主机端口,嗅探所提供的网络服务
(2)是探测一组主机是否在线
(3)还可以推断主机所用的操作系统,到达主机经过的路由,系统已开放端口的软件版本
nmap有windows和linux
从下面官网可以下载exe程序包和zip包
https://nmap.org/download.html#windows
示例:
主机名扫描 [root@localhost ~]# nmap k8s-master ip地址扫描 [root@localhost ~]# nmap 192.168.19.35 使用-v选项 [root@localhost ~]# nmap -v k8s-master 使用“ -v “选项后给出了远程机器更详细的信息 扫描多台主机 [root@localhost ~]# nmap 192.168.19.2 192.168.19.20 192.168.19.35 扫描整个子网 [root@localhost ~]# nmap 192.168.19.* nmap扫描了整个子网,给出了网络中当前网络中在线主机的信息 使用IP地址的最后一个字节扫描多台服务器 [root@localhost ~]# nmap 192.168.19.20,35,2 从一个文件中扫描主机列表 [root@localhost ~]# cat > nmaptest.txt localhost server2.tecmint.com 192.168.0.101 带“iL” 选项的nmap命令来扫描文件中列出的所有IP地址 [root@localhost ~]# nmap -iL nmaptest.txt 扫描一个IP地址范围 [root@localhost ~]# nmap 192.168.19.0-3 排除一些远程主机后再扫描 [root@server1 ~]# nmap 192.168.0.* --exclude 192.168.0.100 扫描操作系统信息和路由跟踪,使用-A选项 [root@localhost ~]# nmap -A 192.168.19.35 启用Nmap的操作系统探测功能,使用选项“-O”和“-osscan-guess”也帮助探测操作系统信息 [root@server1 ~]# nmap -O server2.tecmint.com 扫描主机侦测防火墙 [root@server1 ~]# nmap -sA 192.168.0.101 扫描主机检测是否有防火墙保护 [root@server1 ~]# nmap -PN 192.168.0.101 找出网络中的在线主机 [root@server1 ~]# nmap -sP 192.168.0.* 执行快速扫描 使用“-F”选项执行一次快速扫描 [root@server1 ~]# nmap -F 192.168.0.101 查看Nmap的版本 [root@server1 ~]# nmap -V 顺序扫描端口,使用“-r”选项表示不会随机的选择端口扫描 [root@server1 ~]# nmap -r 192.168.0.101 打印主机接口和路由,使用nmap的“–iflist”选项检测主机接口和路由信息 [root@localhost ~]# nmap --iflist 扫描特定的端口,使用-P选项 [root@server1 ~]# nmap -p 80 server2.tecmint.com 扫描TCP端口 [root@server1 ~]# nmap -p T:8888,80 server2.tecmint.com 扫描UDP端口 [root@server1 ~]# nmap -sU 53 server2.tecmint.com 扫描多个端口 [root@server1 ~]# nmap -p 80,443 192.168.0.101 扫描指定范围内的端口 [root@server1 ~]# nmap -p 80-160 192.168.0.101 查找主机服务版本号 [root@server1 ~]# nmap -sV 192.168.0.101 使用TCP ACK (PA)和TCP Syn (PS)扫描远程主机 [root@server1 ~]# nmap -PS 192.168.0.101 使用TCP ACK扫描远程主机上特定的端口 [root@server1 ~]# nmap -PA -p 22,80 192.168.0.101 使用TCP Syn扫描远程主机上特定的端口 root@server1 ~]# nmap -PS -p 22,80 192.168.0.101 执行一次隐蔽的扫描 [root@server1 ~]# nmap -sS 192.168.0.101 使用TCP Syn扫描最常用的端口 [root@server1 ~]# nmap -sT 192.168.0.101 执行TCP空扫描以骗过防火墙 root@server1 ~]# nmap -sN 192.168.0.10
9.18.lsof
功能:(list open files)是一个列出当前系统打开文件的工具
常用选项:
-i:监听网络地址,不指定,列出所有。如果指定,有这些选项[protocol][@hostname|hostaddr][:service|port]
-U 列出Unix域socket文件
-p 指定PID
-u 指定用户名或UID所有打开的文件
示例:
[root@localhost scripts]# lsof -i:22 #列出22端口监听进程 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 904 root 3u IPv4 9105 0t0 TCP *:ssh (LISTEN) sshd 904 root 4u IPv6 9109 0t0 TCP *:ssh (LISTEN) sshd 10458 root 3r IPv4 42798 0t0 TCP 192.168.19.20:ssh->192.168.19.1:61752 (ESTABLISHED) sshd 10770 root 3r IPv4 43930 0t0 TCP 192.168.19.20:ssh->192.168.19.1:63426 (ESTABLISHED) [root@localhost scripts]# lsof #列出所有选项
lsof工具详解:
简介
lsof是英文单词是”list open files”的缩写,见名知义,即是一个列出当前系统打开文件的工具。如果说 netcat 是进行网络诊断的最好工具,那么lsof 就是 Unix 调试的最好工具。
lsof 遵从 Unix 哲学的典范,它只做一件事情,并且做的相当完美。它打开的文件可能是普通的文件,目录,NFS 文件,块文件,字符文件,共享库,常规管道,符号链接,Socket 流,网络 Socket,UNIX 域Socket,以及其它更多。lsof的输出除了生成单个输出列表外,lsof还能以重复模式运行,在重复模式下,它将产生输出,延迟,然后重复输出操作,直到中断或退出信号停止。
文件描述目可使用stat命令来查看,如下
安装
许多 Unix 系统和Linux系统都内置了 lsof,提供lsof服务的包名就叫做lsof。如果你的系统没有安装,你可以从下面地址直接下载源代码。https://people.freebsd.org/~abe/
BSD 系统有一个类似的工具也可以做同样的事情,叫做 fstat。本文主要以Unix或Linux为例
[root@vin ~]# yum install lsof -y
高频用法
# 查询帮助 [root@localhost ~]# man lsof [root@localhost ~]# lsof -h # 列出所有打开的文件;不带任何参数运行 lsof 会列出所有进程打开的所有文件。 [root@localhost ~]# lsof # 找出谁在使用某个文件 lsof /path/to/file 只需要执行文件的路径,lsof 就会列出所有使用这个文件的进程. lsof /path/to/file1 /path/to/file2 指定多个文件,lsof 会列出所有使用这些文件的进程 # 递归查找某个目录中所有打开的文件 lsof +D /usr/lib lsof | grep '/usr/lib' 加上 +D 参数,lsof 会对指定目录进行递归查找,注意这个参数要比 grep 版本慢 。 之所以慢是因为 +D 首先查找所有的文件,然后一次性输出。 # 列出某个用户打开的所有文件 lsof -u python lsof -u tom,root lsof -u tom -u root -u 选项限定只列出所有被用户 python 打开的文件,你可以通过逗号指定多个用户 。 你也可以像第三条命令那样使用多个 -u 做同样的事情。 # 查找某个程序打开的所有文件 lsof -c apache lsof -c apa lsof -c apache -c python -c 选项限定只列出以某进程开头的进程打开的文件;所以你可以不用像这样写 "lsof | grep jerry"而使用"lsof -c jerry" 你可以只制定进程名称的开头,上面第二条 同样可以制定多个 -c 参数,例如上面第三条 # 列出所有由某个用户或某个进程打开的文件 lsof -u vinsent -c apache 你也可以组合使用多个选项,这些选项默认进行或关联,也就是说上面的命令会输入由 vinsent 用户或是 apache 进程打开的文件。 # 列出所有由一个用户与某个进程打开的文件 lsof -a -u vinsent -c bash -a 参数可以将多个选项的组合条件由或变为与,上面的命令会显示所有由 vinsent 用户以及 bash 进程打开的文件。 # 列出除 root 用户外的所有用户打开的文件 lsof -u ^root root 前面的 ^ 符号,它执行取反操作,因此lsof 会列出所有 root 用户之外的用户打开的文件。 # 列出所有由某个 PID 对应的进程打开的文件 lsof -p 1 lsof -p 450,980,333 -p 选项让你可以使用进程 id 来过滤输出。记住你也可以用逗号来分离多个 pid。 # 列出所有进程打开的文件除了某个 pid 的 lsof -p ^1 同前面的用户一样,你也可以对 -p 选项使用 ^ 来进行取反。 # 列出所有网络连接 lsof -i lsof 的 -i 选项可以列出所有打开了网络套接字(TCP 和 UDP)的进程。 # 列出所有 TCP 网络连接 lsof -i tcp 也可以为 -i 选项加上参数,比如 tcp,tcp 选项会强制 lsof 只列出打开 TCP sockets 的进程。 # 列出所有 UDP 网络连接 lsof -i udp 同样 udp 让 lsof 只列出使用 UDP socket 的进程。 # 找到使用某个端口的进程 lsof -i :25 lsof -i :smtp :25 和 -i 选项组合可以让 lsof 列出占用 TCP 或UDP 的 25 端口的进程。 你也可以使用 /etc/services 中制定的端口名称来代替端口号,比如上面第二条。 # 找到使用某个 udp 端口号或者某个 tcp 端口的进程 lsof -i udp:53 lsof -i tcp:80 # 找到某个用户的所有网络连接 lsof -a -u hacker -i 使用 -a 将 -u 和 -i 选项组合可以让 lsof 列出某个用户的所有网络行为。 # 列出所有 NFS(网络文件系统)文件 lsof -N 这个参数很好记,-N 就对应 NFS。 # 列出所有 UNIX 域 Socket 文件 lsof -U 这个选项也很好记,-U 就对应 UNIX。 # 列出所有对应某个组 id 的进程 lsof -g 1234 进程组用来逻辑上对进程进行分组,这个例子查找所有 PGID 为 1234 的进程打开的文件。 # 列出所有与某个描述符关联的文件 lsof -d 2 lsof -d 0-2 这个命令会列出所有以描述符 2 打开的文件;你也可以为描述符指定一个范围。 上述第二条命令会列出所有描述符为 0,1,2 的文件。 # 查看所有内存映射文件 lsof -d mem # 所有加载在内存中并正在执行的进程 lsof -d txt # 输出使用某些资源的进程 pid lsof -t -i -t 选项输出进程的 PID,你可以将它和 -i 选项组合输出使用某个端口的进程的 PID, # kill所有使用网络的进程 kill -9 `lsof -t -i` # 循环列出文件 lsof -r 1 -r 选项让 lsof 可以循环列出文件直到被中断,参数 1 的意思是每秒钟重复打印一次, 这个选项最好同某个范围比较小的查询组合使用。例如下面的例子。 # 监测网络活动 lsof -r 1 -u tom -i -a
9.19.mail
功能:发送和接收网络邮件
示例:
[root@36 ~]# mail -s 'hello' root --s参数是定义主题 1111111111111111 --邮件正文 . --点号表示结束 Cc: --抄送,这里我直接回车表示结束 [root@li ~]# mail a --也是调用mail命令 Subject: hello a i am root . Cc: b [root@36 ~]# mail -s 'hello2' root < /etc/fstab --把/etc/fstab的内容做为邮件的正文来发 # echo "2222222" | mail -s "11111" mail1 # cat /etc/rc.local | mail -s "333333" mail1 alt+f4 切换用户,然后mail查看 d 1删除,p继续打印,q推出 mail -s “主题” user01@localhost mail -s “test” user01 a “/etc/hosts” From: [email protected] (root) hello user01 I am root [root@node1 postfix]# tail -f /var/log/maillog Apr 21 10:42:01 node1 postfix/pickup[3986]: 4E4C982081: uid=0 from=Apr 21 10:42:01 node1 postfix/cleanup[3987]: 4E4C982081: message-id=<[email protected]> Apr 21 10:42:01 node1 postfix/qmgr[2044]: 4E4C982081: from= , size=655, nrcpt=1 (queue active) Apr 21 10:42:01 node1 postfix/local[3989]: 4E4C982081: to= , orig_to= , relay=local, delay=0.03, delays=0.02/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox) Apr 21 10:42:01 node1 postfix/qmgr[2044]: 4E4C982081: removed Apr 21 10:43:07 node1 postfix/pickup[3986]: D504B82081: uid=0 from= Apr 21 10:43:07 node1 postfix/cleanup[3987]: D504B82081: message-id=<[email protected]>
9.20.mutt
功能:一个linux下文本的MUA工具
常用选项:
m:写邮件
y:发送
r:回复
d:删除
a:添加附件
su - user1
mutt去查看
示例:
[root@36 ~]# mutt [email protected] --使用root用户给user1用户发送邮件,并且有发送附件等功能 mutt -s “mutt” redhat # echo hello world |mutt -s "test mutt" user02 -a "/etc/inittab" -a "/etc/hosts"
9.21.nslookup
功能:交互式查询Internet名称服务器,也就是查询DNS信息
语法:nslookup [-option] [name | -] [server]
示例:
[root@localhost ~]# nslookup > www.baidu.com Server: 114.114.114.114 #默认配置dns服务器 Address: 114.114.114.114#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com #对应的百度dns Address: 163.177.151.110 Name: www.a.shifen.com Address: 163.177.151.109
9.22.dig
功能:dns查询工具
dig设置灵活、输出清晰、功能强大的特点。
常用选项:
-c 可以设置协议类型(class),包括IN(默认)、CH和HS。
-f dig支持从一个文件里读取内容进行批量查询
-4和-6 用于设置仅适用哪一种作为查询包传输协议,分别对应着IPv4和IPv6。
-t 用来设置查询类型,默认情况下是A,也可以设置MX等类型
-q 其实它本身是一个多余的选项,但是它在复杂的dig命令中又是那么的有用。-q选项可以显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性,
-x 是逆向查询选项。可以查询IP地址到域名的映射关系。
示例:
[root@localhost ~]# dig ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59450 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0 说明:不加任何参数及选项,默认上连DNS服务器查询“.”(根域)的NS记录 [root@localhost ~]# dig . ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> . ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44635 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 说明:加点应该是查本机的 用google-DNS来查baidu.com的A记录 [root@localhost ~]# dig @8.8.8.8 www.baidu.com A dig的基本的命令格式 dig @dnsserver name querytype [root@localhost ~]# cat querylist www.baidu.com www.sohu.com [root@localhost ~]# dig -f querylist -c IN -t A [root@localhost ~]# dig roclinux.cn -t MX [root@localhost ~]# dig -q www.roclinux.cn [root@localhost ~]# dig -x 193.0.14.129 [root@localhost ~]# dig +tcp www.baidu.com # DNS查询过程中的交互是采用UDP的。如果你希望采用TCP方式,需要这样 [root@localhost ~]# dig +domain=baidu.com image #默认追加域 [root@localhost ~]# dig +trace roclinux.cn #dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来 [root@localhost ~]# dig +short www.baidu.com #精简输出 [root@localhost ~]# dig +nocmd +nocomment +nostat www.baidu.com ;www.baidu.com. IN A www.baidu.com. 342 IN CNAME www.a.shifen.com. www.a.shifen.com. 34 IN A 14.215.177.38 www.a.shifen.com. 34 IN A 14.215.177.39
9.23.host
功能:测试域名工作是否正常
常用选项:
-a:显示详细的DNS信息;
-c<类型>:指定查询类型,默认值为“IN“;
-C:查询指定主机的完整的SOA记录;
-r:在查询域名时,不使用递归的查询方式;
-t<类型>:指定查询的域名信息类型;
-v:显示指令执行的详细信息;
-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4:使用IPv4;
-6:使用IPv6.
示例:
[root@localhost ~]# host www.baidu.com www.baidu.com is an alias for www.a.shifen.com. www.a.shifen.com has address 14.215.177.39 www.a.shifen.com has address 14.215.177.38 [root@localhost ~]# host -a www.baidu.com Trying "www.baidu.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47657 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.baidu.com. IN ANY ;; ANSWER SECTION: www.baidu.com. 914 IN CNAME www.a.shifen.com. Received 58 bytes from 114.114.114.114#53 in 199 ms
9.24.traceroute
功能:将路由包跟踪打印到网络主机上
常用选项:
-I --icmp Use ICMP ECHO for tracerouting #ICMP协议请求路由包
-T --tcp Use TCP SYN for tracerouting #tcp协议请求路由包
-p port --port=port #端口请求
示例:
root@localhost ~]# traceroute baidu.com traceroute to baidu.com (180.149.132.47), 30 hops max, 60 byte packets 1 192.168.19.2 (192.168.19.2) 0.086 ms 0.037 ms 0.041 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 说明:*号主要是服务器把udp数据包屏蔽了,所有没有返回ICMP [root@localhost ~]# traceroute -T -p 80 baidu.com traceroute to baidu.com (180.149.132.47), 30 hops max, 52 byte packets 1 192.168.19.2 (192.168.19.2) 0.168 ms 0.072 ms 0.101 ms 2 180.149.132.47 (180.149.132.47) 42.414 ms 37.795 ms 38.718 ms
9.25.tcpdump
功能:抓包工具
常用选项:
-A:文本形式显示抓包数据
-X:显示16进制的报文数据
-w:输出结果到文件中,如- w 1.cap 将报文输出到 1.cap 文件,此文件可用 wireshark 查看
示例:
过滤主机和端口号 如 host 11.11.11.11 and port 12345 过滤主机 ip 为 11.11.11.11,端口号为 12345 的 tcp 报文
抓取eth0网卡上的包,使用: [root@localhost scripts]# tcpdump -i eth0 抓取 80 端口的 HTTP 报文,以文本形式展示: [root@localhost scripts]# tcpdump -i any port 80 -A
9.26.starce
功能:跟踪系统调用和信号
常用选项:
-f:跟踪进程内的线程
-C: 统计时间段内的各个系统调用次数分布
-e trace: 过滤某些系统调用
如 - e trace=network 只显示网络相关的系统调用,-e trace=open,close,read,write 只显示这 4 个系统调用,常用于只获取某些特定的系统调用
-ttt: 显示系统调用的时间
- s: 加大字符串的长度限制,如:-s 1024
示例:
跟踪 pid 为 12345 的进程中所有线程的 read 和 write 系统调用,输出字符串的长度限制为 1024: strace -s 1024 -f -e trace=read,write -p 12345 跟踪test进程: strace -p [test_pid] 或直接strace ./test
9.27.elinks
功能:实现纯文本界面访问网页
语法:elinks(选项)(参数)
常用选项:
-anonymous:是否使用匿名帐号方式;
-auto-submit:遇到的第一个表单是否自动提交;
-config-dir:指定elinks指令运行时读取和写入自身的配置和运行状态的存放目录;
-dump:将HTML文档以纯文本的方式打印到标准输出设备;
-version:打印指令的版本信息;
-h:打印帮助信息。
示例:
[root@localhost ~]# elinks -dump www.baidu.com Refresh: [1]/baidu.html?from=noscript Link: [2]百度搜索 (search) Link: [3]dns-prefetch Link: [4]dns-prefetch Link: [5]dns-prefetch Link: [6]dns-prefetch Link: [7]dns-prefetch Link: [8]dns-prefetch Link: [9]dns-prefetch Link: [10]dns-prefetch [11]到百度首页 [12]_____________________ [13][ 百度一下 ] 输入法 * [14]手写 * [15]拼音 * * [16]关闭
9.28.curl
功能:传递一个url
语法:curl [options] [URL...]
常用选项:
-a/--append |
上传文件时,附加到目标文件 |
-A/--user-agent |
指定客户端信息 |
-anyauth |
可以使用“任何”身份验证方法 |
-b/--cookie |
从文件中读取cookie |
--basic |
使用HTTP基本验证 |
-B/--use-ascii |
使用ASCII /文本传输 |
-c/--cookie-jar |
操作结束后把cookie写入到这个文件中 |
-C/--continue-at |
断点续传 |
-c/--cookie-jar |
把cookie保存到文件 |
-d/--data |
使用POST方式发送数据 |
--data-ascii | 以ascii的方式post数据 |
--data-binary | 以二进制的方式post数据 |
--negotiate |
使用HTTP身份验证 |
--digest |
使用数字身份验证 |
--disable-eprt |
禁止使用EPRT或LPRT |
--disable-epsv |
禁止使用EPSV |
-D/--dump-header |
保存头信息到文件 |
--data-urlencode |
POST的数据URL编码 |
--egd-file |
为随机数据(SSL)设置EGD socket路径 |
--tcp-nodelay |
使用TCP_NODELAY选项 |
-e/--referer |
来源网址 |
-E/--cert |
客户端证书文件和密码 (SSL) |
--cert-type |
证书文件类型 (DER/PEM/ENG) (SSL) |
--key |
私钥文件名 (SSL) |
--key-type |
私钥文件类型 (DER/PEM/ENG) (SSL) |
--pass |
私钥密码 (SSL) |
--engine |
加密引擎使用 (SSL). "--engine list" for list |
--cacert |
CA证书 (SSL) |
--capath |
CA目录 (made using c_rehash) to verify peer against (SSL) |
--ciphers |
SSL密码 |
--compressed |
要求返回是压缩的形势 (using deflate or gzip) |
--connect-timeout |
设置最大请求时间 |
--create-dirs |
建立本地目录的目录层次结构 |
--crlf |
上传是把LF转变成CRLF |
-f/--fail |
连接失败时不显示http错误 |
--ftp-create-dirs |
如果远程目录不存在,创建远程目录 |
--ftp-method [multicwd/nocwd/singlecwd] |
控制CWD的使用 |
--ftp-pasv |
指定FTP连接模式PASV/EPSV |
--ftp-skip-pasv-ip |
使用PASV的时候,忽略该IP地址 |
--ftp-ssl |
尝试用 SSL/TLS 来进行ftp数据传输 |
--ftp-ssl-reqd |
要求用 SSL/TLS 来进行ftp数据传输 |
-F/--form |
指定POST数据的表单 |
--form-string |
模拟http表单提交数据 |
-g/--globoff |
禁用网址序列和范围使用{}和[] |
-G/--get |
以get的方式来发送数据 |
-H/--header |
自定义头信息发送给服务器 |
--ignore-content-length |
忽略的HTTP头信息的长度 |
-i/--include |
输出时包括protocol头信息 |
-L/--location |
遵循URL重定向,默认不处理 |
-I/--head |
查看HTTP头信息 |
-j/--junk-session-cookies |
读取文件进忽略session cookie |
--interface |
使用指定网络接口/地址 |
--krb4 |
使用指定安全级别的krb4 |
-k/--insecure |
允许不使用证书到SSL站点 |
-K/--config |
指定的配置文件读取 |
-l/--list-only |
列出ftp目录下的文件名称 |
--limit-rate |
设置传输速度 |
--local-port |
强制使用本地端口号 |
-M/--manual |
显示全手动 |
-n/--netrc |
从netrc文件中读取用户名和密码 |
--netrc-optional |
使用 .netrc 或者 URL来覆盖-n |
--ntlm |
使用 HTTP NTLM 身份验证 |
-N/--no-buffer |
禁用缓冲输出 |
-O/--remote-name |
使用远程服务器上名字写到本地 |
-p/--proxytunnel |
使用HTTP代理 |
--proxy-anyauth |
选择任一代理身份验证方法 |
--proxy-basic |
在代理上使用基本身份验证 |
--proxy-digest |
在代理上使用数字身份验证 |
--proxy-ntlm |
在代理上使用ntlm身份验证 |
-q |
作为第一个参数,关闭 .curlrc |
-Q/--quote |
文件传输前,发送命令到服务器 |
-P/--ftp-port |
指定FTP端口 |
-r/--range |
检索来自HTTP/1.1或FTP服务器字节范围 |
--range-file |
读取(SSL)的随机文件 |
-R/--remote-time |
在本地生成文件时,保留远程文件时间 |
--retry |
连接重试次数 |
--retry-delay |
两次重试间隔等待时间 |
--retry-max-time |
传输出现问题时,设置最大重试时间 |
-#/--progress-bar |
显示bar进度条 |
-x,/--proxy[PROTOCOL://]HOST[:PORT] |
使用代理 |
-o/--output |
输出到文件 |
-U/--proxy-user |
代理用户名和密码 |
--connect-timeout |
连接超时时间,单位秒 |
-t/--telnet-option |
Telnet选项设置 |
--trace |
对指定文件进行debug |
--trace-ascii |
Like --跟踪但没有hex输出 |
--trace-time |
跟踪/详细输出时,添加时间戳 |
-x/--proxy |
在给定的端口上使用HTTP代理 |
-X/--request |
指定什么命令 |
-s/--silent |
静默模式,不输出任何东西 |
-S/--show-error |
显示错误 |
--socks4 |
用socks4代理给定主机和端口 |
--socks5 |
用socks5代理给定主机和端口 |
--stderr |
|
-y/--speed-time |
放弃限速所要的时间,默认为30 |
-Y/--speed-limit |
限制下载速率 |
-u/--user |
指定http和ftp用户名和密码 |
-U/--proxy-user |
设置代理用户名和密码 |
-T/ --upload-file |
上传文件 |
--url |
Spet URL to work with |
-m/--max-time |
指定处理的最大时长 |
--max-redirs |
设置最大读取的目录数 |
--max-filesize |
设置最大下载的文件总量 |
w/--write-out [format] |
什么输出完成后 |
示例:
[root@localhost scripts]# curl www.baidu.com #百度字符页面就展示在命令行上 [root@localhost scripts]# curl -o baidu.html www.baidu.com #保存页面 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 103 2381 103 2381 0 0 41981 0 --:--:-- --:--:-- --:--:-- 211k [root@localhost scripts]# ls baidu.html baidu.html [root@localhost scripts]# curl -s -o baidu.html www.baidu.com #不输出下载信息 [root@localhost scripts]# [root@localhost scripts]# curl -b cookies www.baidu.com #使用cookie访问 # curl -u user:pass http://www.example.com #访问HTTP认证页面 1.当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。 curl http://www.codebelief.com 显示 HTTP 主页内容 2.如果我们只想要显示 HTTP 头,而不显示文件内容,可以使用 -I 选项: curl -I http://www.codebelief.com 输出为: HTTP/1.1 200 OK Server: nginx/1.10.3 Date: Thu, 11 May 2017 08:24:45 GMT Content-Type: text/html; charset=utf-8 Content-Length: 24206 Connection: keep-alive X-Powered-By: Express Cache-Control: public, max-age=0 ETag: W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ" Vary: Accept-Encoding 3.也可以同时显示 HTTP 头和文件内容,使用 -i 选项: curl -i http://www.codebelief.com 输出为: HTTP/1.1 200 OK Server: nginx/1.10.3 Date: Thu, 11 May 2017 08:25:46 GMT Content-Type: text/html; charset=utf-8 Content-Length: 24206 Connection: keep-alive X-Powered-By: Express Cache-Control: public, max-age=0 ETag: W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ" Vary: Accept-Encoding ......  4.将链接保存到文件 我们可以使用 > 符号将输出重定向到本地文件中。 curl http://www.codebelief.com > index.html 也可以通过 curl 自带的 -o/-O 选项将内容保存到文件中。 -o(小写的 o):结果会被保存到命令行中提供的文件名 -O(大写的 O):URL 中的文件名会被用作保存输出的文件名 curl -o index.html http://www.codebelief.com curl -O http://www.codebelief.com/page/2/ 注意:使用 -O 选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o 选项手动指定文件名,或使用重定向符号。  5.同时下载多个文件 我们可以使用 -o 或 -O 选项来同时指定多个链接,按照以下格式编写命令: curl -O http://www.codebelief.com/page/2/ -O http://www.codebelief.com/page/3/ 或者: curl -o page1.html http://www.codebelief.com/page/1/ -o page2.html http://www.codebelief.com/page/2/  6.使用 -L 跟随链接重定向 如果直接使用 curl 打开某些被重定向后的链接,这种情况下就无法获取我们想要的网页内容。例如: curl http://codebelief.com 会得到如下提示:301 Moved Permanently 301 Moved Permanently
nginx/1.10.3 而当我们通过浏览器打开该链接时,会自动跳转到 http://www.codebelief.com。此时我们想要 curl 做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。我们可以在命令中添加 -L选项来跟随链接重定向: curl -L http://codebelief.com 这样我们就能获取到经过重定向后的网页内容了。  7.使用 -A 自定义 User-Agent 我们可以使用 -A 来自定义用户代理,例如下面的命令将伪装成安卓火狐浏览器对网页进行请求: curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com 下面我们会使用 -H 来实现同样的目的。 8.使用 -H 自定义 header 当我们需要传递特定的 header 的时候,可以仿照以下命令来写: curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com 可以看到,当我们使用 -H 来自定义 User-Agent 时,需要使用 "User-Agent: xxx" 的格式。 我们能够直接在 header 中传递 Cookie,格式与上面的例子一样: curl -H "Cookie: JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com 另一种方式会在下面介绍  9.使用 -c 保存 Cookie 当我们使用 cURL 访问页面的时候,默认是不会保存 Cookie 的。有些情况下我们希望保存 Cookie 以便下次访问时使用。例如登陆了某个网站,我们希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的 Cookie 保存起来,下次访问时再读取。 -c 后面跟上要保存的文件名。 curl -c "cookie-example" http://www.example.com  10.使用 -b 读取 Cookie 前面讲到了使用 -H 来发送 Cookie 的方法,这种方式是直接将 Cookie 字符串写在命令中。如果使用 -b 来自定义 Cookie,命令如下: curl -b "JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com 如果要从文件中读取 Cookie,-H 就无能为力了,此时可以使用 -b 来达到这一目的: curl -b "cookie-example" http://www.example.com 即 -b 后面既可以是 Cookie 字符串,也可以是保存了 Cookie 的文件名。  11.使用 -d 发送 POST 请求 我们以登陆网页为例来进行说明使用 cURL 发送 POST 请求的方法。假设有一个登录页面 www.example.com/login,只需要提交用户名和密码便可登录。我们可以使用 cURL 来完成这一 POST 请求,-d 用于指定发送的数据,-X 用于指定发送数据的方式: curl -d "userName=tom&passwd=123456" -X POST http://www.example.com/login curl -d "userName=tom&passwd=123456" -X POST http://www.example.com/login curl -d "userName=tom&passwd=123456" http://www.example.com/login 12.强制使用 GET 方式 发送数据时,不仅可以使用 POST 方式,也可以使用 GET 方式,例如: curl -d "somedata" -X GET http://www.example.com/api 或者使用 -G 选项: curl -d "somedata" -G http://www.example.com/api 13.从文件中读取 data curl -d "@data.txt" http://www.example.com/login 14.带 Cookie 登录 当然,如果我们再次访问该网站,仍然会变成未登录的状态。我们可以用之前提到的方法保存 Cookie,在每次访问网站时都带上该 Cookie 以保持登录状态。 curl -c "cookie-login" -d "userName=tom&passwd=123456" http://www.example.com/login 再次访问该网站时,使用以下命令: curl -b "cookie-login" http://www.example.com/login 这样,就能保持访问的是登录后的页面了。 15.获取状态码 通过curl的-w参数我们可以自定义curl的输出,%{http_code}代表http状态码 [root@localhost html]# curl -I -m 10 -o /dev/null -s -w %{http_code} 192.168.19.20 200[root@localhost html]# [root@localhost ~]# curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" 192.168.19.20 200 -I/--head 只显示头文件信息 -m 指定处理的最大时长 -s 静默模式,不输出任何长度 -w 什么输入完成后 -o 输出到文件