一起来学linux:网络命令
首先介绍最基本也是经常用到的命令ifconfig,对应windows中的ipconfig。执行ifconfig会将所有的端口信息都显示出来,包括IP地址,MTU 接收和发送的报文还有HWaddr也就是MAC地址
root@zhf-linux:/home/zhf# ifconfig
eth0 Link encap:Ethernet HWaddr 00:23:5a:b6:de:9f
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
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:65536 Metric:1
RX packets:820 errors:0 dropped:0 overruns:0 frame:0
TX packets:820 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:66752 (66.7 KB) TX bytes:66752 (66.7 KB)
wlan0 Link encap:Ethernet HWaddr 00:26:82:07:ef:3c
inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::226:82ff:fe07:ef3c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10115 errors:0 dropped:0 overruns:0 frame:0
TX packets:5520 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6316755 (6.3 MB) TX bytes:686532 (686.5 KB)
如果只是想列出某个端口的网络地址可以使用ifconfig wlan0的方法
root@zhf-linux:/home/zhf# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 00:26:82:07:ef:3c
inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::226:82ff:fe07:ef3c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10902 errors:0 dropped:0 overruns:0 frame:0
TX packets:6101 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6499772 (6.4 MB) TX bytes:773060 (773.0 KB)
我们还可以通过ifconfig来修改这些网络的相关信息。
修改MTU信息:
root@zhf-linux:/home/zhf# ifconfig wlan0 mtu 1400
wlan0 Link encap:Ethernet HWaddr 00:26:82:07:ef:3c
inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::226:82ff:fe07:ef3c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:11902 errors:0 dropped:0 overruns:0 frame:0
TX packets:6912 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7099710 (7.0 MB) TX bytes:864672 (864.6 KB)
修改端口的IP地址
root@zhf-linux:/home/zhf# ifconfig eth0 192.168.0.15
如果时候ifconfig错误的修改了网络佩之,可以通过/etc/init.d/networking restart的方式来重新启动某个网口,之前手动的设置数据会全部失效。
如果我使用的是无线网卡,查看具体的无线网络信息通过iwconfig命令
root@zhf-linux:/home/zhf# iwconfig
wlan0 IEEE 802.11bg ESSID:"zhf_dxx"
Mode:Managed Frequency:2.462 GHz Access Point: A4:56:02:4D:65:1F
Bit Rate=18 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=-3 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:330 Invalid misc:735 Missed beacon:0
路由信息:
上网除了配置IP地址等信息外,路由也是一个关键的因素。路由顾名思义就是如何转发数据包的依据。
route命令可以查看当前服务器的信息。
Destinaton和Genmask分别是网络地址与网络掩码。第一条路由信息中Destination是default, Genmask是0.0.0.0. 可以认为是全网路由,也就是可以达到任务的网络地址。
Gateway就是网关,从当前服务器出去的数据都是通过网关地址设备来进行转发。这里网关地址为192.168.0.1也就是无线路由器的地址。
Flags: 路由的标识。 U表示路由是启动的。H目标是一台主机而非网络 。G:需要通过外部的主机来传递数据包。R:动态路由。 D:动态路由。M:路由被修改了
Iface:路由传递数据报的接口
root@zhf-linux:/home/zhf# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 600 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 wlan0
192.168.0.0 * 255.255.255.0 U 600 0 0 wlan0
我们还可以手动添加和删除路由:
添加的时候需要设置-net 目标网络地址,netmask 网络掩码 gw:网关
root@zhf-linux:/home/zhf# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
root@zhf-linux:/home/zhf# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
root@zhf-linux:/home/zhf# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 600 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 wlan0
192.168.0.0 * 255.255.255.0 U 600 0 0 wlan0
192.168.1.0 192.168.0.1 255.255.255.0 UG 0 0 0 wlan0
删除的时候可以不带网关地址。
root@zhf-linux:/home/zhf# route del -net 192.168.1.0 netmask 255.255.255.0
root@zhf-linux:/home/zhf# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 600 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 wlan0
192.168.0.0 * 255.255.255.0 U 600 0 0 wlan0
下面介绍一个综合前面route 和ifconfig的命令:ip. 主要有几个参数;
-s:显示出设备的统计数据,如接收数据包的总数等
link: 与设备相关的设置,包括MTU,Mac地址等
addr/address:关于额外的IP协议
route: 与路由有关的相关设置
比如ip link show显示所有端口的硬件信息
root@zhf-linux:/home/zhf# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:23:5a:b6:de:9f brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 00:26:82:07:ef:3c brd ff:ff:ff:ff:ff:ff
还可以通过ip link set eth0 up/ip link set eth0 down来启动和关闭端口
还可以修改端口的名称,但首先要关闭这个端口。否则无法修改
root@zhf-linux:/home/zhf# ip link set eth0 name zhf
RTNETLINK answers: Device or resource busy
root@zhf-linux:/home/zhf# ip link set eth0 down
root@zhf-linux:/home/zhf# ip link set eth0 name zhf
root@zhf-linux:/home/zhf# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: zhf: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:23:5a:b6:de:9f brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 00:26:82:07:ef:3c brd ff:ff:ff:ff:ff:ff
ip route添加路由
root@zhf-linux:/home/zhf# ip route add 192.168.5.0/24 dev eth0
root@zhf-linux:/home/zhf# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 600 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 wlan0
192.168.0.0 * 255.255.255.0 U 600 0 0 wlan0
192.168.5.0 * 255.255.255.0 U 0 0 0 eth0
接着介绍几个网络定位的命令。 首先来看用到最多的命令ping
ping的参数如下;
-c 后面接ping的次数
-s ping报文的大小
-t TTL的数值
-W:等待响应对方主机的秒数
-M:主要检测网络的MTU数值大小
比如ping 5次新浪网。从第一行可以看到ping包的字节默认为56个字节,加上28个字节的头信息
root@zhf-linux:/home/zhf# ping -c 5 www.sina.com.cn
PING www.sina.com.cn (218.30.66.248) 56(84) bytes of data.
64 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=1 ttl=54 time=19.8 ms
64 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=2 ttl=54 time=19.2 ms
64 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=3 ttl=54 time=22.0 ms
64 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=4 ttl=54 time=33.3 ms
64 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=5 ttl=54 time=21.8 ms
--- www.sina.com.cn ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 19.202/23.265/33.306/5.144 ms
改变ping包字节大小为120字节。加上头信息为148字节
root@zhf-linux:/home/zhf# ping -c 5 -s 120 www.sina.com.cn
PING www.sina.com.cn (218.30.66.248) 120(148) bytes of data.
128 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=1 ttl=54 time=19.5 ms
128 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=2 ttl=54 time=22.7 ms
128 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=3 ttl=54 time=18.8 ms
128 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=4 ttl=54 time=45.0 ms
128 bytes from www.sina.com.cn (218.30.66.248): icmp_seq=5 ttl=54 time=18.0 ms
--- www.sina.com.cn ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 18.062/24.846/45.060/10.230 ms
我们可以根据ping 命令来写一个探测网络内存在的主机:
for siteip in $(seq 1 254)
do
site="192.168.1.${siteip}"
ping -c 2 ${site} &>/dev/null
if [ "$?" == 0 ];then
echo "$site is up"
else
echo "$site is down"
fi
done
root@zhf-linux:/home/zhf/zhf/shell_prj# sh ping_test.sh
192.168.1.1 is up
192.168.1.2 is up
192.168.1.3 is down
192.168.1.4 is down
192.168.1.5 is down
192.168.1.6 is down
192.168.1.7 is down
ping命令虽然能检测链路是否通,但是网络传输中会经过很多个网络节点。如果不通的话数据包是在哪个网络节点遇到故障了呢,这个时候就需要用到traceroute命令。
主要参数如下;
-n: 不必进行主机的名称解析,单纯用IP
-U:使用UDP的port 33434进行检测。这是Linux默认的协议。windows是采用ICMP
-I:使用ICMP的方式进行检测
-T:使用TCP进行检测
-w: 设置等待对方响应的时间
-p:端口号
可以看到traceroute会显示经过的每个节点的IP以及所消耗的时延。这样就十分便于我们定位问题到底出在哪
root@zhf-linux:/home/zhf/zhf/shell_prj# traceroute -n www.sina.com.cn
traceroute to www.sina.com.cn (218.30.66.248), 30 hops max, 60 byte packets
1 192.168.1.1 4.485 ms 4.505 ms 4.578 ms
2 100.64.0.1 8.041 ms 8.262 ms 10.867 ms
3 100.64.0.1 11.015 ms 11.144 ms 11.284 ms
4 220.167.87.17 19.405 ms 19.595 ms 19.651 ms
5 171.208.203.69 22.509 ms 171.208.203.57 22.172 ms 22.257 ms
6 202.97.48.125 35.747 ms 202.97.48.117 36.414 ms 202.97.48.125 30.744 ms
7 218.30.19.94 37.071 ms 218.30.69.2 25.474 ms 218.30.19.94 38.695 ms^C
root@zhf-linux:/home/zhf/zhf/shell_prj# traceroute www.sina.com.cn
traceroute to www.sina.com.cn (218.30.66.248), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 7.411 ms 7.513 ms 7.563 ms
2 100.64.0.1 (100.64.0.1) 8.165 ms 8.451 ms 8.686 ms
3 100.64.0.1 (100.64.0.1) 9.012 ms 9.000 ms 9.268 ms
4 220.167.87.17 (220.167.87.17) 48.949 ms 49.123 ms 49.170 ms
5 171.208.203.69 (171.208.203.69) 10.046 ms 171.208.203.57 (171.208.203.57) 9.840 ms 171.208.198.25 (171.208.198.25) 13.523 ms
6 202.97.48.125 (202.97.48.125) 34.782 ms 26.170 ms 202.97.48.117 (202.97.48.117) 31.479 ms
7 218.30.69.2 (218.30.69.2) 22.882 ms 218.30.19.94 (218.30.19.94) 31.512 ms 218.30.69.2 (218.30.69.2) 23.094 ms
即使有了traceroute命令,我们也只是知道问题是出在哪。但是问题的根因是什么我们还是不知道。很多时候需要抓包进行问题分析。这时候就要用到tcpdump命令。tcpdump不但可以分析数据包的流向,而且连数据包的内容也可以进行监听
关键参数如下:
-A: 数据包的内容以ASCII显示
-e:使用数据链路层MAC数据包数据来显示
-nn:直接以IP及port number显示
-q:仅列出简短的数据信息
-X:列出十六进制以及ASCII的数据包内容
-i: 要监听的网络接口 例如eth0,lo,wlan等
-w: 如果你要将监听所得的数据包数据存储下来,后面接文件名
-r:从后面的文件将数据包数据读出来
抓取wlan0端口的数据并存储到test1.txt文件中。
tcpdump -i wlan0 -nn -X > test1.txt
21:48:06.869312 IP 180.149.136.194.80 > 192.168.0.11.50592: Flags [S.], seq 3280367214, ack 1401941542, win 14600, options [mss 1440,nop,nop,sackOK,nop,wscale 7], length 0
0x0000: 4500 0034 475e 0000 3706 3e5b b495 88c2 E..4G^..7.>[....
0x0010: c0a8 000b 0050 c5a0 c386 6e6e 538f ee26 .....P....nnS..&
0x0020: 8012 3908 fe65 0000 0204 05a0 0101 0402 ..9..e..........
0x0030: 0103 0307 ....
21:48:06.869360 IP 192.168.0.11.50592 > 180.149.136.194.80: Flags [.], ack 1, win 229, length 0
0x0000: 4500 0028 ae0b 4000 4006 8eb9 c0a8 000b E..(..@.@.......
0x0010: b495 88c2 c5a0 0050 538f ee26 c386 6e6f .......PS..&..no
0x0020: 5010 00e5 7747 0000 P...wG..
21:48:06.870044 IP 192.168.0.11.50592 > 180.149.136.194.80: Flags [.], seq 1:1441, ack 1, win 229, length 1440: HTTP: GET /mfp/view?type=3&t=MjAxNy0xMC0xOCAyMTo0ODowNAkxMTguMTEzLjQzLjIzNgkyMjIuMjEwLjE2NC4yMTBfMTQ0ODQ2MDA0Ni4yNDE1ODMJaHR0cDovL3d3dy5zaW5hLmNvbS5jbi8JUERQUzAwMDAwMDAwNTQ5NAk2NTdkZDFiOC0xYjVhLTQ2N2YtOTNiOC02MWM0MzcxODIwYzQJREI0QTk5OEZDOEE4CURCNEE5OThGQzhBOAlhdXRvX2xldmVsOjE4MDEwMHx1c2VyX2dyb3VwOjkwOSw5MTN8dXNlcl90YWc6MjA5NTZ8cG9zOlBEUFMwMDAwMDAwMDU0OTR8d2FwX29zOjcwMHx1c2VyX2FnZTo2MDIsNjAxLDYwM3x2X3pvbmU6MzI2MDAwLDMyNjAwMXx1c2VyX2dlbmRlcjo1MDF8X3Zfem9uZTozMjYwMDAsMzI2MDAxfGF1dG9fcHJpY2U6MTgwMjAwfG1vYmlsZV9icmFuZDoxMjA5fG1vYmlsZV9icm93c2VyOjgwN3x2ZXJzaW9uOmdsX2JwMV8xLHBjOjEuMAkJMzI2MDAwfDMyNjAwMQlEQjRBOTk4RkM4QTgJTkIxNzA0MDI0MQkJREI0QTk5OEZDOEE4CUFFCS0JMQktCS0JLQktCS0JLQktCS0JLQkxCS0JMAkwCWNoYW5uZWwyOmJsb2dfc3xvczp1YnVudHV8YnJvd3NlcjpmaXJlZm94fHBsYXRmb3JtOm90aGVyfGRldmljZTpvdGhlcnxhZFBsYXRGb3JtOjA%3D&userid=222.210.164.210_1448460046.241583&viewlog=false&hashCode=3400c1d3fbc463e290cf234cd786ceed&_sinaads_sio_log_ivciiq HTTP/1.1
由于数据较多,可以将数据内容都存在文件中,后面来查看。cap文件可以用wireshark软件打开。
root@zhf-linux:/home/zhf/zhf# tcpdump -i wlan0 -w tcpdump_test.cap
想监听某一个端口,比如监控网页的数据。可以指定端口
root@zhf-linux:/home/zhf/zhf# tcpdump -i wlan0 -nn port 8080
一起来学linux:网络命令的更多相关文章
- Linux 基础——常用的Linux网络命令
一.学Linux网络命令有什么好处 网络的出现,我们的生活更方便了,处理事情的效率也越来越高,也可以看到全世界文化的差异.同时我们接受新事物的信息越来越来强,新事物的信息也越来越来多.网络对于我们尔等 ...
- 基础的 Linux 网络命令,你值得拥有
导读 有抱负的 Linux 系统管理员和 Linux 狂热者必须知道的.最重要的.而且基础的 Linux 网络命令合集.在 It's FOSS 我们并非每天都谈论 Linux 的"命令行方面 ...
- 你必须了解的基础的 Linux 网络命令
Linux 基础网络命令列表 我在计算机网络课程上使用 FreeBSD,不过这些 UNIX 命令应该也能在 Linux 上同样工作. 连通性 ping <host>:发送 ICMP ech ...
- Linux网络管理——Linux网络命令
3. Linux网络命令 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB&quo ...
- 初中级DBA必需要学会的9个Linux网络命令,看看你有哪些还没用过
笔者不久前写了一篇文章<做DBA必须学会,不会会死的11个Linux基本命令>,博文地址为:http://blog.csdn.net/ljunjie82/article/details/4 ...
- 请收好 Linux 网络命令集锦
看着kali linux上百个网络命令,我陷入了沉思.专业的网络命令实在是太多了,如果要罗列,上千个也是有的.个人不是渗透测试工作者,大部分功能只知皮毛.所以本文是非常浅显的技术总结,仅聚焦工作中常用 ...
- Linux网络命令与脚本使用
作为系统管理员,经常需要诊断和解决网络问题,而配置.监控与保护网络有助于发现问题并在事情范围扩大前得意解决,并且网络的性能与安全也是管理与诊断网络的重要部分.这里总结一下常用与Linux网络管理的命令 ...
- Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!
目录 01 简介 02 tcpdump 命令选项 03 过滤器 04 常用操作 4.1 抓取某主机的数据包 4.2 抓取某端口的数据包 4.3 抓取某网络(网段)的数据包 4.4 抓取某协议的数据包 ...
- Linux网络命令必知必会之瑞士军刀 nc(netcat)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. nc,全名叫 ...
- Linux网络命令——ifconfig、ifup、ifdown
这三个命令的用途都是启动网络接口,不过,ifup 与 ifdown 仅就 /etc/sysconfig/network- scripts 内的 ifcfg-ethx(x为数字)进行启动或关闭的操作,并 ...
随机推荐
- 软工+C(2017第8期) 提问与回复
// 上一篇:野生程序员 // 下一篇:助教指南 在线上博客教学里引入了第三方助教,助教在每次作业期间尽力完成"消灭零点评"的目标.然而紧接而来的问题是:学生对博客作业点评的回复率 ...
- 团队作业4——第一次项目冲刺(Alpha版本)2nd day
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 界面 1.四个用户登录界面已经完成. 2.界面内的功能完成了一小部分. 登陆部分 1.QQ授权已经申请,还未通过. 2.通过好 ...
- 201521123039 《java程序设计》第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 总结: 1.集合可以动态修改大小,但是不可以存放基本数据类型: 2.java中任何对象都是is-a Objec ...
- 201521123009 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 Q1:List中指定元素的删除(题目4-1) 1.1 实验总结 Scanne ...
- 201521123076 《Java程序设计》第7周学习总结
1. 本周学习总结 2. 书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 A:先上源代码: public boolean contains(Obje ...
- 201521123039 《java程序设计》第七周学习总结
1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 答:ArrayList的Contains的源码如上图所示,如果o为null,那么 ...
- eclipse版本选择
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会. Ec ...
- Hyperledger Fabric 1.0 从零开始(三)——环境构建(内网/准离线)
有公网环境的服务器可以直接看 Hyperledger Fabric 1.0 从零开始(二)--环境构建(公网) ,本篇内容与上篇相似,只不过环境搭建需要在内网下,也就是网络被限制的情况下. 1:环境构 ...
- [10] 过滤器 Filter
1.过滤器的基本概念和作用 在网站的页面访问时,我们往往需要做一些控制,如普通用户无法访问VIP用户的页面.如果在每一个需要访问控制的文件中都加上判断代码,那么代码将会很冗余,一旦需要统一修改时也极其 ...
- OC——继承
继承的其中一个很重要的目的是为了实现多态.我们现在先来看看OC的继承. 一.继承 父类: 头文件 // // Peason.h // 01-继承和多态 // // Created by zhangji ...