shao.bing的专栏

坚持正确的自我,坚定自己的信念,勇敢前进

FreeBSD网络相关命令

23.5.1 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

23.5.2 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

23.5.3 arp

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

$ arp 192.168.0.1

23.5.4 traceroute

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

$ traceroute www.freebsd.org

23.5.5 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) 次数。当网络负荷量大时,封包送出时较易发生碰撞,碰撞产生时,系统会等待一段时间尝试再次送出封包。碰撞次数越多,联机品质越差。

23.5.6 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)。

23.5.7 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。

23.5.8 telnnet

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

$ telnet bbs.mgt.ncu.edu.tw

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

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

23.5.9 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

23.5.10 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] 切换本地所在目录。

23.5.11 nslookup

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

$ nslookup www.freebsd.org

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

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

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

$ nslookup 216.136.204.21

23.5.12 dig

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

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

23.5.13 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 的长度一样,这个封包应该没有破损。

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shaobingj126/article/details/5644342
个人分类: FreeBSD
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭