Linux 常用操作命令-网络命令

2020-07-08 00:00:00 文件 指定 端口 抓取 样例

4、网络命令

4.1 hostname

显示或者设置系统的主机名。

样例1:把主机名称设置为testhost.huawei.com

# hostname testhost.huawei.com

4.2 ping/ping6

测试指定主机是否可以连通。Ping6是IPv6版本。

4.3 telnet/ssh *

用telnet或ssh协议登录远端主机。

样例1:一种常用的做法是测试远端主机的某端口是否在监听,或者是否可以连通。象下面的情况,看到“Escape character is '^]'”说明1521端口以及连上了,按ctrl+]即可进入到telnet命令行,然后输入quit退出。

# telnet 10.75.125.41 1521
Trying 10.75.125.41...
Connected to 10.75.125.41.
Escape character is '^]'.
^] //这里是按了ctrl+]
telnet> quit
Connection closed.

样例2:以ossuser用户连接远端主机。

# ssh -l ossuser 10.75.125.41
Password:
Last login: Sat Sep 8 15:42:43 2012 from 10.66.112.83
-bash-3.1$

4.4 ifconfig **

查看网卡配置,可以知道机器上有哪些网卡,哪些IP。

样例1:可以看到有2块物理网卡,一个使用外网IP地址,一个使用内网IP地址;还有1块是逻辑网卡。这样,需要使用tcpdump或snoop抓取网络包时,如果要抓取192.168.100.234相关的网络包,就需要指定设备eth8,要抓取10.75.127.81相关的网络包,就指定eth0。

# ifconfig -a
eth6 Link encap:Ethernet HWaddr 00:25:9E:AF:F3:A4
inet addr:10.75.127.81 Bcast:10.75.127.255 Mask:255.255.255.0
inet6 addr: fe80::225:9eff:feaf:f3a4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:420029392 errors:0 dropped:0 overruns:0 frame:0
TX packets:835892192 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:63969384187 (61005.9 Mb) TX bytes:278524449129 (265621.6 Mb)
Interrupt:66
eth8 Link encap:Ethernet HWaddr 00:25:9E:AF:F3:A2
inet addr:192.168.100.234 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::225:9eff:feaf:f3a2/64 Scope:Link
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:322636 errors:0 dropped:0 overruns:0 frame:0
TX packets:1406 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:32419909 (30.9 Mb) TX bytes:459539 (448.7 Kb)
Interrupt:169
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:338380235 errors:0 dropped:0 overruns:0 frame:0
TX packets:338380235 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:92265291192 (87991.0 Mb) TX bytes:92265291192 (87991.0 Mb)

样例2:# ifconfig eth0 10.78.1.0 netmask255.255.255.0。把网卡eth0的ip地址改为10.78.1.0,子网掩码为255.255.255.0

样例3:# ifconfig eth0 down。关闭网卡。Linux下可简写为ifdown eth0,Ifdown是指向ifup脚本的链接。

样例4:# ifconfig eth0 up。激活网卡。Linux下可简写为ifup eth0,Ifup是一个脚本,有兴趣可看看是做了什么事情。

4.5 traceroute *

跟踪到指定机器的路由。当我们无法连通一台机器时,我们想知道是路由到哪个机器时出了问题,就可以使用这个命令。

样例1:在10.75.124.94上查看访问10.67.160.99机器时经过了哪些节点。-n表示不对IP做名字解析。

# ifconfig -a|grep inet
inet 127.0.0.1 netmask ff000000
inet 10.75.124.94 netmask ffffff00 broadcast 10.75.124.255
# traceroute -n 10.67.160.99
traceroute to 10.67.160.99 (10.67.160.99), 30 hops max, 40 byte packets
1 10.75.124.254 1.296 ms 5.156 ms 10.200 ms
2 10.75.255.46 1.427 ms 1.221 ms 1.352 ms
3 10.79.10.145 6.844 ms 6.588 ms 6.956 ms
4 10.79.10.125 1.835 ms 7.101 ms 1.714 ms
5 10.67.255.13 2.091 ms 8.327 ms 1.892 ms
6 10.67.160.99 0.944 ms 0.848 ms 0.839 ms

4.6 ftp **

访问ftp服务器的客户端命令行工具。

样例1:有时我们会发现solaris上没有dbx调试器,可以通过ftp拷贝一个过来使用。下面的样例登录到10.75.124.94获取一个dbx调试器,为了演示,做了很多不必要的动作。

# ftp 10.75.124.94
Connected to 10.75.124.94.
220 "Authorized users only. All activity may be monitored and reported"
Name (10.75.124.94:root):
331 Please specify the password.
Password: //这里输错了密码
530 Login incorrect. //报错了
Login failed.
ftp> user root //重新指定用户,会提示输入这个用户的密码
331 Please specify the password.
Password: //输入了正确的密码
230 Login successful.
ftp> bi //指定二进制模式。如果是文本模式,并且是在windows和linux/solaris间传输,会自动把所传文件中遇到的所有回车换行做转换,即如果是windows->linux/solaris,所有0x0D0x0A会被转为0x0A,如果是linux/solaris->windows,所有0x0A会被转换为0x0D0x0A,从而破坏了文件内容。
200 Switching to Binary mode.
ftp> cd /opt/SUNWspro/prod/bin //进入到ftp服务上的dbx所在目录
250 Directory successfully changed.
ftp> !pwd //查看本机当前目录。如果不加!前缀,就是查看ftp服务器上的当前目录
/opt/iMAP_bak/var/logs
ftp> !mkdir tmpdir //在本机(不是ftp服务器)创建一个tmpdir目录。如果不加!前缀,就是在服务器上创建tmpdir
ftp> lcd tmpdir //进入本机的tmpdir目录。如果使用cd而不是lcd,则是进入ftp服务器的tmpdir
Local directory now /opt/iMAP_bak/var/logs/tmpdir
ftp> get dbx //从服务器传输文件到本机当前目录
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for dbx (4291372 bytes).
226 Transfer complete.
local: dbx remote: dbx
4291372 bytes received in 0.24 seconds (17743.99 Kbytes/s)
ftp> get /opt/SUNWspro/prod/bin/dbx ./dbx //传文件时也可以直接指定路径,但如果不指定第2个参数(本地文件或目录),则会放到与服务器相同的路径上。假如你想把A机器上的/opt/iMAP/lib/libimaptaskmgr.so传到B机器的/opt/iMAP/newlib目录中,就要小心了,不指定目标文件参数,会覆盖掉B机器上的/opt/iMAP/lib/libimaptaskmgr.so。

样例2:如果我们在A机器上编译,要放到B机器上进行测试时,如果要反复编译后传结果文件,可以用下面的办法:准备好一个ftp指令文件,需要传文件时直接执行下面后一行命令就可以了。要输入一行ftp命令是不是比samba拷文件还麻烦?不是的,因为你只需要用上键翻出这个命令按回车就可以了,或者执行ctrl+r+f再按回车就可以了(ctrl+r表示搜索历史命令,按f后历史命令中的"ftp -ni 10.75.124.94 < ftpcmd.txt"就会跳出来)。

# cat ftpcmd.txt
user root 57ic #指定用户名和密码
cd /opt/ #进入到服务器的指定目录
bi #切换为bin传输模式
lcd /export/buildenv/C05_Merge_Code/sf/sf/impl/server/released/bin #切换到编译环境的可执行文件生成目录
put testimapos #传输指定文件
by #退出
# ftp -ni 10.75.124.94 < ftpcmd.txt

样例3:如果我们要获取10.71.125.41上/opt/iMAP/lib目录下的所有libimap*.so文件该怎么做?

# ftp 10.75.125.41
Connected to 10.75.125.41.
220 "Authorized users only. All activity may be monitored and reported"
Name (10.75.125.41:root):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /opt/iMAP/lib //进入目标目录
250 Directory successfully changed.
ftp> bi //指定bin传输模式
200 Switching to Binary mode.
ftp> prompt //要求在传输多文件是不要逐个提示要不要传,再执行一次这个命令又会切回去,表示逐个提示
Interactive mode off.
ftp> mget libimap*.so //下载所有的libimap*.so到本机。如果是上传,则是mput libimap*.so。
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for libimapCommonFtps.so (1263526 bytes).
226 Transfer complete.
local: libimapCommonFtps.so remote: libimapCommonFtps.so
1263526 bytes received in 0.3 seconds (4109.18 Kbytes/s)
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for libimapSmAccessUtil.so (148343 bytes).
226 Transfer complete.
local: libimapSmAccessUtil.so remote: libimapSmAccessUtil.so
…………

如果要传目录怎么办?抱歉,ftp命令行工具都不支持,打个包再传吧,或者用图形化的ftp客户端工具,如xftp等。

4.7 netstat *

查看网络统计信息,可以看到有哪些连接,哪些端口在监听,在Linux下还可以看到对应的进程信息。

样例1:查看1521端口有没有在监听。下面第1条命令在solaris/linux下通用。第2条命令更强大,但只适用于linux。

# netstat -na|grep LIST|grep 1521
tcp 0 0 0.0.0.0:1521 0.0.0.0:* LISTEN
# netstat -ntlp|grep 1521
tcp 0 0 0.0.0.0:1521 0.0.0.0:* LISTEN 30115/tnslsnr

-n表示不把IP转换为机器名,很多时候如果不这么做速度会很慢。

-a表示除了显示连接,还显示监听端口。

-t表示查看tcp协议相关信息,如果是查看udp协议相关信息,使用-u。

-l表示listen,只查看监听端口,如果不带这个,就只查看连接,不看监听端口,例如netstat -ntp|grep 1521会列出所有数据库连接。

如何在Solaris下想要知道某端口是哪个进程监听的?没有直接的办法,可参考hi3ms.huawei.com/hi/gro 《solaris上的端口查看工具》,这里提供了一个脚本工具,用起来比较方便。

样例2:查看与数据库端口4100建立连接的情况。要注意的是,因为是本机进程间的连接,每条连接可以看到2条记录,所以如果是用wc统计数量,记得要除以2。

# netstat -na|grep EST|grep 4100 # linux/solaris通用,EST表示ESTABLISHED。
10.75.124.94.61206 10.75.124.94.4100 49152 0 49152 0 ESTABLISHED
10.75.124.94.4100 10.75.124.94.61206 49152 0 49767 0 ESTABLISHED
10.75.124.94.61210 10.75.124.94.4100 49152 0 49152 0 ESTABLISHED
10.75.124.94.4100 10.75.124.94.61210 49152 0 49767 0 ESTABLISHED
…………
# netstat -ntp|grep 4100 #linux专用

样例3:查看路由表。

# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 bond1
10.75.125.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.75.125.254 0.0.0.0 UG 0 0 0 bond0

4.8 tcpdump/snoop

这两个都是网络抓包工具,前者是Linux自带的,后者是Solaris自带的,它们生成的文件格式都是支持RFC标准的,可以放到windows上用Wireshark或Networkmonitor工具分析。

样例1:抓取本机1521端口的通信,并存到netrc.cap文件中。按Ctrl+c终止抓取。

# tcpdump -i lo -s 2048 -w netrc.cap tcp and port 1521
tcpdump: listening on lo, link-type EN10MB (Ethernet), capture size 2048 bytes
<ctrl+c>
10 packets captured
10 packets received by filter
0 packets dropped by kernel
# tcpdump -A -r netrc.cap
…………

-i lo表示抓取逻辑网卡lo上的通讯包,即本机通讯。很遗憾snoop在当前的solaris的版本中无法做到,在新的open solaris则已可支持此功能。

-s 2048表示抓取通讯包的前2K数据,默认是只会抓取包头,如果要分析通讯内容则要用这个选项放大抓取范围。

-w netrc.cap 表示将抓取的结果写到netrc.cap文件。

Tcp表示只抓取tcp协议数据包。

Port 1521表示抓取1521端口的通讯包。

-r netrc.cap表示读取并解析netrc.cap文件的内容。

-A表示将网络包的内容以ASCII方式打印出来。

样例2:抓取本机1521端口的通信,但只抓单向通讯内容,存到netrc.cap文件中。按Ctrl+c终止抓取。

# tcpdump -i lo -s 2048 -w netrc.cap tcp and dst port 1521 #只抓发往1521端口的内容
# tcpdump -i lo -s 2048 -w netrc.cap tcp and src port 1521 #只抓从1521端口发出的内容
# tcpdump -i eth0 -s 2048 -w netrc.cap tcp and dst host 10.75.125.81 and port 1521 #抓1521端口的内容,但只限发往10.75.125.81机器的
# tcpdump -i eth0 -s 2048 -w netrc.cap tcp and src host 10.75.125.81 and port 1521 #抓1521端口的内容,但只限从10.75.125.81机器发出的

Snoop的用法和tcpdump很类似,有如下差异:

(1) 用-d指定网卡,且不能指定逻辑网卡lo。

(2) 用-o指定保存文件。

(3) 和tcpdump的-A类似的选项是-x。

其它指定协议、IP、端口都是一样的用法。

4.9 write/wall

Write是向指定用户的屏幕上发送消息,wall是向所有用户发送消息,一般用于需要重启服务或服务器前通知他人。不过我们现在有各种丰富的沟通方式,这种命令已经很少用了,有兴趣可以自己玩玩。

相关文章