登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

永福的技术博客

Linux运维

 
 
 
 
 

日志

 
 

FreeBSD 网络相关指令  

2010-11-02 16:32:01|  分类: FreeBSD |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 ping

检查远程系统的联机状态。ping 指令会送出 ICMP 封包到指定的主机,我们可以藉此来检查网络联机品质。

常用参数如下:

参数说明
-c count指定要计算 count 次。
-s size指定每个封包大小为 size。
-t timeout指定 time out 时间。
-I interface如果目标主机地址是广播地址,而且我们有多个网接口,可以指定要使用哪一个接口。

例如我们要看 www.freebsd.org 的联机品质:

$ ping www.freebsd.org PING freefall.freebsd.org (216.136.204.21): 56 data bytes 64 bytes from 216.136.204.21: icmp_seq=0 ttl=54 time=458.986 ms 64 bytes from 216.136.204.21: icmp_seq=1 ttl=54 time=502.258 ms 64 bytes from 216.136.204.21: icmp_seq=2 ttl=54 time=491.489 ms ^C --- freefall.freebsd.org ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 458.986/484.244/502.258/18.393 ms

 ifconfig

设定或检查网络接口。我们可以使用 ifconfig 来显示所有的网络接口,如果使用参数 -u 表示显示使用中的网络接口,而 -d 则是非运作中的接口。

我们也可以使用 ifconfig 来让网络接口运作或停用。

用法:

ifconfig [down|up] interface

假设我们要让网络卡 vr0 停用:

# ifconfig vr0 down

我们也可以使用 ifconfig 来设定网络上的 IP 地址。假设要设定 IP 为 192.168.0.1,而子网掩码为 255.255.255.0:

# ifconfig vr0 192.168.0.1 netmask 255.255.255.0

接着再使用 ifconfig 将 vr0 启用:

# ifconfig vr0 up

 arp

显示 arp 地址。例如我们要显示 192.168.0.2 这台机器的网络卡号:

$ arp 192.168.0.1

 traceroute

追踪由本机到某台主机所使用的路径。当我们使用 ping 来检查网络联机状况时,如果发现无法联机,我们可以使用 traceroute 来检查到底是网络上的哪一台主机有问题。

$ traceroute www.freebsd.org

 netstat

显示网络状况。我们可以使用 netstat 来显示目前的联机状况。例如:

$ netstat -a Active Internet connections (including servers) Proto Recv-Q Send-Q  Local Address Foreign Address   (state) tcp4       0     20  www.ssh       198.z27z4z49.1780 ESTABLISHED tcp4       0      0  *.http        *.*               LISTEN tcp4       0      0  *.https       *.*               LISTEN tcp4       0      0  *.smtp        *.*               LISTEN tcp4       0      0  *.ssh         *.*               LISTEN tcp4       0      0  *.pop3        *.*               LISTEN udp4       0      0  *.syslog      *.* udp6       0      0  *.syslog      *.* Active UNIX domain sockets Address  Type   Recv-Q Send-Q    Inode    Conn Refs Nextref Addr cd864e00 dgram    0      0        0    cd84ef0   0 cd864fc0 cd864fc0 dgram    0      0        0    cd84ef0   0        0 

我们可以由上面的结果看到目前有一个使用者正使用 ssh 连到我们的网站。经由上表,我们可以看出我们所提供的服务有哪些,目前的使用情形如何。如果我们希望 Foreign Address 直接显示 IP ,可以使用参数 -n。

我们也可以使用参数 -i 来查看网络接口的使用情形:

$ netstat -ai Name  Mtu   Network       Address            Ipkts Ierrs   Opkts Oerrs  Coll dc0   1500      00:80:c8:f6:b2:66 68890922 15997 8370716  1256 60296                         33:33:c0:f6:78:e9 dc0   1500  fe80:1::280 fe80:1::281:c8ff:        0     -       0     -     -                         ff02:1::2:c1f7:78e9(refs: 1)                         ff02:1::1          (refs: 1)                         ff02:1::1:ffe7:b266(refs: 1) lp0*  1500                                       0     0       0     0     0 lo0   16384                                  34050     0   34050     0     0 

我们简单说明一下各字段所代表的意义:

  • Name:设备的名称。
  • Mtu:最大的传送单元(unit)。
  • Network:此接口所提供的网络或目的地主机。
  • Address:接口的地址。
  • Ipkts:表示接收到的封包。
  • Ierrs:表示接收到但破损的封包数量。
  • Opkts:表示送出的封包。
  • Oerrs:表示送出但破损的封包。
  • Coll:表示发生碰撞 (Collision) 次数。当网络负荷量大时,封包送出时较易发生碰撞,碰撞产生时,系统会等待一段时间尝试再次送出封包。碰撞次数越多,联机品质越差。

 sockstat

列出开启中的 socket。

$ sockstat USER     COMMAND   PID  FD PROTO  LOCAL ADDRESS  FOREIGN ADDRESS root     telnetd 52897   0 tcp4   192.168.0.1:23 192.168.0.2:1969 root     sshd    34063   4 tcp4   *:22           *:* nobody   httpd   11670  16 tcp4   *:443          *:* nobody   httpd   11670  17 tcp4   *:80           *:* root     sendmail  117   4 tcp4   *:25           *:* root     sendmail  117   5 tcp4   *:587          *:* root     inetd     109   4 tcp4   *:21           *:* USER     COMMAND    PID   FD PROTO  ADDRESS mysql    mysqld     170    6 stream /tmp/mysql.sock root     sendmail   117    3 dgram  syslogd[100]:3 root     syslogd    100    3 dgram  /var/run/log 

每个字段所代表的意义如下:

  • USER:哪个使用者开启的 socket。
  • COMMAND:经由哪一个指令。
  • PID:该指令的 process ID 是多少。
  • DF:socket 的 file descriptor number。
  • PROTO:哪一种协定。
  • LOCAL ADDRESS:本地的地址及 port (Internet sockets only)。
  • FOREIGN ADDRESS:来源的地址及 port (Internet sockets only)。
  • ADDRESS:socket 开启的档案或目标程序(UNIX sockets only)。

 mail

邮件处理程序。古老的 UNIX 邮件处理程序,这个程序对于不熟悉的人使用起来可能有点困难。但是这是在每个 UNIX 系统中都会有的程序,有时在没有其它选择的状况下,我们还是要使用它,至少要知道如何用它来收发信件。

假设我们要寄信给本机的 root:

$ mail root

如果我们要寄信给非本机的使用者,可以使用的收件人格式如下:

执行了 mail 之后,程序会先要求我们输入邮件主旨,输入后就可以开始打本文了。当完成本文的编辑之后,可以按 Ctrl+D 来将信件送出,或是按二次 Ctrl+C取消。

我们也可以在执行 mail 时加上参数 -s "subject" 来指定主旨:

$ mail -s"hi, my friend" jack@mymail.com

如果我们想要将一个文字文件的内容当做本文送出,例如,我们可以先编辑一个文字文件 content.txt,接着使用下列方式:

$ mail -s "hi, my friend" jack@mymail.com < content.txt

说完了寄信,我们来了解一下如何收信。我们可以打 mail 来收信,如果是 root 还可以使用 mail -u user 来收使用者 user 的信件。

$ mail "/var/mail/root": 12 messages 10 unread >U  1 jack         Fri Feb 22 03:02  42/690   "Hi friend"  U  2 jack         Fri Feb 22 03:02  74/2620  "see you tomorrow"  U  3 mary@abc.com Sat Feb 23 03:06 570/33527 "don't forget" & 

最后面出现的 & 为 mail 程序命令列的提示符号,在第一封信件开头有一个符号 ">" 表示目前作用中的信件。我们可以直接输入邮件编号来读取信件。另外,我们也可以输入下列指令:

指令说明
h列出所有信件。
r回复目前作用中的信件。
n读取下一封信件。
p读取前一封信件。
pre [mail number]保留编号为 mail number 的信件在系统的 mailbox中 (/var/mail/)。程序 mail 对于己读取的信件,预设会将它搬到使用者家目录下的 mbox 中。我们如果日后还想要使用 pop3 来收该信件,就必须使用 pre 将该信件保留在系统的邮件目录中。
d删除作用中的信件。
z显示下一页信件列表。
q离开 mail。

 telnnet

使用终端机远程登入网络上的主机。例如:

$ telnet bbs.mgt.ncu.edu.tw

如果在 telnet 时要能输入中文,必须加上参数 -8:

$ telnet -8 bbs.mgt.ncu.edu.tw

 ssh

使用 telnet 并未加数据加密,我们很容易在不知不觉中泄露信息。如果要登入的主机有提供 ssh 登入的话,最好使用 ssh。

用法:

ssh username@hostname ssh hostname

例如:

$ ssh mary@140.115.77.11 $ ssh jack@mydomain.com $ ssh mydomain.com

只打 hostname 而没有使用者名称,登入名称会是你目前所用的使用者名称。

如果所联机的主机是第一次联机会出现下列一堆东西,打 "yes" 三个字即可:

The authenticity of host '140.115.77.11' can't be established. RSA key fingerprint is 13:93:8a:61:31:df:41:3f:7a:0a:77:ad:7e:49:e7:3f. Are you sure you want to continue connecting (yes/no)? yes 

 ftp

档案传输程序。如果要登入的主机允许昵名登入,我们使用参数 -a 来自动登入。

$ ftp -a freebsd.csie.nctu.edu.tw

进入 ftp 之后,会出现命令的提示列。我们可以输入以下的指令:

指令说明
help 或 ?显示可以使用的指令。
ls列出远程所在目录的档案。
pwd显示远程所目录位置。
cd dir进入远程的 dir 目录。
get file从远程取回 file 档案。
put file将本地端的 file 档案上传到远程机器。
acsii使用文字模式传送档案。
binary使用二进制模式传送档案。
bye结束 ftp。
mget *.tgz取回远程所有名称为 *.tgz 的档案。
mput *.tgz上传本地所有 *.tgz 的档案。
!ls显示本地所在目录下的档案。
lpwd 或 !pwd显示本地所在目录。
lcd [dir]切换本地所在目录。

 nslookup

网络主机名称查询。如果我们要查询 www.freebsd.org 所对映的 IP,最简单的用法是:

$ nslookup www.freebsd.org

我们也可以在上述指令最后面加上要查询的 DNS 主机:

$ nslookup www.freebsd.org dns.hinet.net

我们也可以使用 IP 来进入反查:

$ nslookup 216.136.204.21

 dig

是另一个功能强大的主机名称查询工具。简单的用法如下:

$ dig -x 216.136.204.21 $ dig www.freebsd.org

tcpdump

显示或记录网络封包。如果要使用 tcpdump,在核心中必须要有 Berkeley packet filter,而且有 /dev/bpf*。如果没有请在核心设定中加入下面这一行,并重新编辑核心:

pseudo-device bpf

执行 tcpdump 后,它会打开指定接口的 promiscuous mode (接口必须支持才有用)。所谓的 promiscuous mode(杂乱模式) 是指不管是否和本机有关的封包都接收进来,要达到这样的效果,必须藉由 bpf 的支持。

我们可以使用 tcpdump 来观察到达某一个网络接口的封包。例如我们要监看接口 vr0 的封包:

# tcpdump -i vr0

如果要结束直接按 Ctrl+C 即可。 如果限制封包数量,可以使用参数 -c。我们也可以使用参数 -w 来将捕捉到的封包存成档案,在这里我们存成 dump 这个档案:

# tcpdump -c 20 -i vr0 -w dump

使用参数 -r 可以读取储存的封包数据:

# tcpdump -r dump

为了控制 tcpdump 能 dump 我们想要的封包,我们还可以在指令最后加上一些 expression 来控制封包的记录。关于 expression 的用法请 man tcpdump

另外介绍一个好用的分析工具 tcpshow, 我们可以使用 ports 来安装。

# cd /usr/ports/net/tcpshow # make install clean

接着就可以使用 tcpshow 来分析我们储存的封包内容:

# tcpshow <dump | more --------------------------------------------------------------- Packet 8 TIME:   04:53:10.938750 (0.011744) LINK:   00:80:2D:BB:65:38 -> 00:50:AA:00:DC:DD type=IP   IP:   tw -> 189 hlen=20 TOS=00 dgramlen=44 id=4353         MF/DF=0/1 frag=0 TTL=52 proto=TCP cksum=C56B  TCP:   port http -> 2451 seq=3298970558 ack=2899053999         hlen=24 (data=0) UAPRSF=010010 wnd=65535 cksum=8549 urg=0 DATA:    --------------------------------------------------------------- 

我们简单的说明一下这个封包的内容。第一部份是时间 TIME。

第二行是 LINK,显示了来源 -> 目的地的网络卡号,另外经由 type=IP,我们知道这是一个 Ethernet_II 的 frame。

第三部份 IP,tw -> 189 是来源及目的地的地址。hlen 是 header length 大小是 20 bytes,而整个 IP 封包 (dgramlen) 的大小是 44 bytes。

第四部份是 TCP,来源是的 port 是 http (内定是 80),而目的地的 port 是 2451。接下来是 TCP 封包的 sequence number 及 acknowledgement 编号。TCP 的 header length 是 24,加上 IP 的 header 20 长度刚好是 44,和 dgramlen 的长度一样,这个封包应该没有破损。

最后,这个封包并没有包含其它的数据。


参考来源:
[1]   http://www.twbsd.org/chs/book/index.php?ch=23
[2]   rickie622.blog.163.com

  评论这张
 
阅读(676)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018