各种常用的默认端口号端口号的范围:1~655351~1024是被RFC 3232规定好的端口(well know ports)1025~65535的端口被称为动态端口(Dynamic Ports)一些常见的端口号及其用途如下:21端口:FTP 文件传输服务22端口:SSH 远程连接服务53端口:DNS 域名解析服务80端口:HTTP 超文本传输服务443端口:HTTPS 加密的超文本传输服务3306端口:MYSQL数据库端口8080端口:TCP服务端默认端口8888端口:Ngin
二. 功能简介:
采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:远程服务类型、操作系统类型及版本,各种弱口令漏洞、后门、应用服务漏洞、网络设备漏洞、拒绝服务漏洞等二十几个大类。对于多数已知漏洞,我们给出了相应的漏洞描述、解决方案及详细描述链接,其它漏洞资料正在进一步整理完善中,您也可以通过本站的"安全文摘"和"安全漏洞"栏目查阅相关说明。
三. 所需文件:
xscan_gui.exe -- X-Scan图形界面主程序
xscan.exe -- X-Scan命令行主程序
checkhost.exe -- 插件调度主程序
update.exe -- 在线升级主程序
*.dll -- 主程序所需动态链接库
使用说明.txt -- X-Scan使用说明
/dat/language.ini -- 多语言配置文件,可通过设置"LANGUAGE\SELECTED"项进行语言切换
/dat/language.* -- 多语言数据文件
/dat/config.ini -- 用户配置文件,用于保存待检测端口列表、CGI漏洞检测的相关设置及所有字典文件名称(含相对路径)
/dat/config.bak -- 备份配置文件,用于恢复原始设置
/dat/cgi.lst -- CGI漏洞列表
/dat/iis_code.ini -- IIS编码漏洞列表
/dat/port.ini -- 用于保存已知端口的对应服务名称
/dat/*_user.dic -- 用户名字典文件,用于检测弱口令用户
/dat/*_pass.dic -- 密码字典,用于检测弱口令用户
/dat/p0f*.fp -- 识别远程主机操作系统所需的操作系统特征码配置文件(被动识别)
/dat/nmap-os-fingerprints -- 识别远程主机操作系统所需的操作系统特征码配置文件(主动识别)
/dat/wry.dll -- "IP-地理位置"地址查询数据库文件
/dat/*.nsl -- 经过整理的NASL脚本列表
/plugins -- 用于存放所有插件(后缀名为.xpn)
/scripts -- 用于存放所有NASL脚本(后缀名为.nasl)
/scripts/desc -- 用于存放所有NASL脚本多语言描述(后缀名为.desc)
注:xscan_gui.exe与xscan.exe共用所有插件及数据文件,但二者之间没有任何依赖关系,均可独立运行。
四. 准备工作:
X-Scan是完全免费软件,无需注册,无需安装(解压缩即可运行),需要WinPCap驱动程序支持(WinPCap 2.3以上版本)。
五. 注意事项:
1.未安装WinPCap驱动虽然可以正常使用X-Scan,但一些需要定制数据包的检测功能将完全失效。
2.端口扫描中的SYN方式和被动主机操作系统识别功能在NT4系统下无法使用,在windows 2000等系统下使用时必须拥有管理员权限。
3.在"X-Scan"中内置的密码字典仅为简单示范,使用者如果希望软件有更强的密码猜解能力,应该自己编辑密码字典文件。
4.命令行方式检测过程中,按"[空格]"键可以查看各线程状态及扫描进度,按"q"键保存当前数据后提前退出程序,按""强行关闭程序。
5."X-Scan"所使用的地址查询数据库为"追捕"软件的数据库,并且得到作者许可。在此对"追捕"软件作者及所有为建立此数据库作出贡献的朋友表示感谢。由于没有考虑和将来"追捕"数据库的兼容问题,不能保证能正确使用以后版本的"追捕"数据库。在"追捕"数据库文件格式没有改变的情况下,可以将新版本的数据库文件"wry.dll"拷贝到/dat目录下替换旧版本文件,但建议在覆盖前备份旧文件.
六. 命令行方式运行参数说明:
1.命令格式: xscan -host [-] [其他选项]
xscan -file [其他选项]
其中 含义如下:
-active : 检测目标主机是否存活
-port : 检测
常用
服务的端口状态(可通过\dat\config.ini文件的"PORT-SCAN-OPTIONS\PORT-LIST"项定制待检测端口列表);
-sql : 检测SQL-Server弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件);
-ftp : 检测FTP弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件);
-ntpass : 检测NT-Server弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件);
-smtp : 检测SMTP-Server弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件);
-pop3 : 检测POP3-Server弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件);
-smb : 检测NT-Server弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件);
-cgi : 检测CGI漏洞(可通过\dat\config.ini文件的"CGI-ENCODE\encode_type"项设置编码方案);
-iis : 检测IIS编码/解码漏洞(可通过\dat\config.ini文件的"CGI-ENCODE\encode_type"项设置编码方案);
-nasl : 加载Nessus攻击脚本;
-all : 检测以上所有项目;
[其他选项] 含义如下:
-v: 显示详细扫描进度
-p: 跳过没有响应的主机
-o: 跳过没有检测到开放端口的主机
-t : 指定最大并发线程数量和并发主机数量,
默认
数量为100,10
* cgi及iis参数中"编码方案"含义:
1.用"HEAD"替换"GET"
2.用"POST"替换"GET"
3.用"GET / HTTP/1.0\r\nHeader:" 替换 "GET"
4.用"GET /[filename]?param=" 替换 "GET"(可通过\dat\config.ini文件的"CGI-ENCODE\encode4_index_file"项设置[filename])
5.用"GET " 替换 "GET"
6.多个"/"或"\"
7."/"与"\"互换
8.用"替换""
注:各变形方案若不冲突则可以同时使用,如"-cgi 1,6,8"表示同时使用第1、6、8号方案对HTTP请求进行变形。
2.示例:
xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -all -active -p
含义:检测xxx.xxx.1.1-xxx.xxx.255.255网段内主机的所有漏洞,跳过无响应的主机;
xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -port -smb -t 150 -o
含义:检测xxx.xxx.1.1-xxx.xxx.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机;
xscan -file host.lst -port -cgi -t 200,5 -v -o
含义:检测"host.lst"文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机;
七. 插件接口:
/* 该函数在初始化插件时被调用,用于获取插件基本信息。
返回值含义:TRUE--插件初始化成功;FALSE--插件初始化失败。*/
extern "C" __declspec(dllexport) BOOL __stdcall GetPluginInfo(PLUGIN_INFO *);
/* 该函数在检测主机时被调用,传入主机基本信息及必要参数,返回扫描结果。
返回值含义:TRUE--存在漏洞;FALSE--不存在漏洞。*/
extern "C" __declspec(dllexport) BOOL __stdcall PluginFunc(VOID *);
插件应导出上述两个函数,xscan.exe将分别在初始化和扫描时调用。编译后将最终生成的.dll程序重命名为.xpn文件,并保存在xscan.exe所在目录的"plugin"子目录内。示例插件程序见“/plugins/XScan_Pub_Plugin_{by_Enfis}.rar”。
二. 功能简介:
采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:远程服务类型、操作系统类型及版本,各种弱口令漏洞、后门、应用服务漏洞、网络设备漏洞、拒绝服务漏洞等二十几个大类。对于多数已知漏洞,我们给出了相应的漏洞描述、解决方案及详细描述链接,其它漏洞资料正在进一步整理完善中,您也可以通过本站的“安全文摘”和“安全漏洞”栏目查阅相关说明。
3.0版本提供了简单的插件开发包,便于有编程基础的朋友自己编写或将其他调试通过的代码修改为X-Scan插件。另外Nessus攻击脚本的翻译工作已经开始,欢迎所有对网络安全感兴趣的朋友参与。需要“Nessus攻击脚本引擎”源代码、X-Scan插件SDK、示例插件源代码或愿意参与脚本翻译工作的朋友,可通过本站“X-Scan”项目链接获取详细资料:“http://www.xfocus.net/projects/X-Scan/index.html”。
三. 所需文件:
xscan_gui.exe -- X-Scan图形界面主程序
xscan.exe -- X-Scan命令行主程序
checkhost.exe -- 插件调度主程序
update.exe -- 在线升级主程序
*.dll -- 主程序所需动态链接库
使用说明.txt -- X-Scan使用说明
/dat/language.ini -- 多语言配置文件,可通过设置“LANGUAGE\SELECTED”项进行语言切换
/dat/language.* -- 多语言数据文件
/dat/config.ini -- 用户配置文件,用于保存待检测端口列表、CGI漏洞检测的相关设置及所有字典文件名称(含相对路径)
/dat/config.bak -- 备份配置文件,用于恢复原始设置
/dat/cgi.lst -- CGI漏洞列表
/dat/iis_code.ini -- IIS编码漏洞列表
/dat/port.ini -- 用于保存已知端口的对应服务名称
/dat/*_user.dic -- 用户名字典文件,用于检测弱口令用户
/dat/*_pass.dic -- 密码字典,用于检测弱口令用户
/dat/p0f*.fp -- 识别远程主机操作系统所需的操作系统特征码配置文件(被动识别)
/dat/nmap-os-fingerprints -- 识别远程主机操作系统所需的操作系统特征码配置文件(主动识别)
/dat/wry.dll -- “IP-地理位置”地址查询数据库文件
/dat/*.nsl -- 经过整理的NASL脚本列表
/plugins -- 用于存放所有插件(后缀名为.xpn)
/scripts -- 用于存放所有NASL脚本(后缀名为.nasl)
/scripts/desc -- 用于存放所有NASL脚本多语言描述(后缀名为.desc)
注:xscan_gui.exe与xscan.exe共用所有插件及数据文件,但二者之间没有任何依赖关系,均可独立运行。
四. 准备工作:
X-Scan是完全免费软件,无需注册,无需安装(解压缩即可运行,自动检查并安装WinPCap驱动程序)。
五. 图形界面设置项说明:
“基本设置”页:
“指定IP范围” - 可以输入独立IP地址或域名,也可输入以“-”和“,”分隔的IP范围,如“192.168.0.1-192.168.0.20,192.168.1.10-192.168.1.254”。
“从文件中获取主机列表” - 选中该复选框将从文件中读取待检测主机地址,文件格式应为纯文本,每一行可包含独立IP或域名,也可包含以“-”和“,”分隔的IP范围。
“报告文件” - 扫描结束后生成的报告文件名,保存在LOG目录下。
“报告文件类型” - 目前支持TXT和HTML两种格式
“扫描完成后自动生成并显示报告” - 如标题所述
“保存主机列表” - 选中该复选框后,扫描过程中检测到存活状态主机将自动记录到列表文件中。
“列表文件” - 用于保存主机列表的文件名,保存在LOG目录下。
“高级设置”页:
“最大并发线程数量” - 扫描过程中最多可以启动的扫描线程数量
“最大并发主机数量” - 可以同时检测的主机数量。每扫描一个主机将启动一个CheckHost进程。
“显示详细进度” - 将在主界面普通信息栏中显示详细的扫描过程
“跳过没有响应的主机” - 如果X-Scan运行于NT4.0系统,只能通过ICMP Ping方式对目标主机进行检测,而在WIN2K以上版本的Windows系统下,若具备管理员权限则通过TCP Ping的方式进行存活性检测。
“跳过没有检测到开放端口的主机” - 若在用户指定的TCP端口范围内没有发现开放端口,将跳过对该主机的后续检测。
“无条件扫描” - 如标题所述
“端口相关设置”页:
“待检测端口” - 输入以“-”和“,”分隔的TCP端口范围
“检测方式” - 目前支持TCP完全连接和SYN半开扫描两种方式
“根据响应识别服务” - 根据端口返回的信息智能判断该端口对应的服务
“主动识别操作系统类型” - 端口扫描结束后采用NMAP的方法由TCP/IP堆栈指纹识别目标操作系统
“预设知名服务端口” - 如标题所述
“SNMP相关设置”页:
全部如标题所述
“NETBIOS相关设置”页:
全部如标题所述
“NASL相关设置”页:
“攻击脚本列表” - 由于目前Scripts目录中的脚本数量已近2000个,在批量扫描中可以通过定制脚本列表,只选取高风险级别漏洞进行检测,以加快扫描速度。若需要选择所有脚本,应将该输入框清空。
“选择脚本” - 打开脚本选择窗口,通过风险级别、检测手段、漏洞类型等分类方式定制脚本列表
“脚本运行超时(秒)” - 设置一个脚本可运行的最长时间,超时后将被强行终止
“网络读取超时(秒)” - 设置TCP连接每次读取数据的最长时间,超时数据将被忽略
“跳过针对主机的破坏性脚本” - 如标题所述
“检测脚本间的依赖关系” - NASL脚本间相互是有关联的,比如一个脚本先获取服务的版本,另一个脚本再根据服务版本进行其他检测。如果打乱了脚本的执行顺序可能会影响扫描结果,但也由于脚本间不需要互相等待,会节省扫描时间。
“顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省扫描时间。
“网络设置”页:
“网络适配器” - 选择适当的网络适配器以便WinPCap驱动过滤相应的数据报,否则可能会漏报由WinPCap驱动接收数据的NASL脚本检测结果,也会影响采用NMAP的方法识别目标操作系统的结果。对于拨号用户,应当选择“\Device\Packet_NdisWanIp”。
“CGI相关设置”页:
“CGI编码方案” - 全部如标题所述
“字典文件设置”页:
设置各服务对应的密码字典文件
六. 命令行方式运行参数说明:
1.命令格式: xscan -host [-] [其他选项]
xscan -file [其他选项]
其中 含义如下:
-active : 检测目标主机是否存活
-os : 检测远程操作系统类型(通过NETBIOS和SNMP协议)
-port : 检测
常用
服务的端口状态
-ftp : 检测FTP弱口令
-pub : 检测FTP服务匿名用户写权限
-pop3 : 检测POP3-Server弱口令
-smtp : 检测SMTP-Server漏洞
-sql : 检测SQL-Server弱口令
-smb : 检测NT-Server弱口令
-iis : 检测IIS编码/解码漏洞
-cgi : 检测CGI漏洞
-nasl : 加载Nessus攻击脚本
-all : 检测以上所有项目
[其他选项] 含义如下:
-i : 设置网络适配器, 可通过"-l"参数获取
-l: 显示所有网络适配器
-v: 显示详细扫描进度
-p: 跳过没有响应的主机
-o: 跳过没有检测到开放端口的主机
-t : 指定最大并发线程数量和并发主机数量,
默认
数量为100,10
-log : 指定扫描报告文件名, TXT或HTML后缀
* cgi及iis参数中“编码方案”含义:
1.用“HEAD”替换“GET”
2.用“POST”替换“GET”
3.用“GET / HTTP/1.0\r\nHeader:” 替换 “GET”
4.用“GET /[filename]?param=” 替换 “GET”(可通过\dat\config.ini文件的“CGI-ENCODE\encode4_index_file”项设置[filename])
5.用“GET ” 替换 “GET”
6.多个“/”或“\”
7.“/”与“\”互换
8.用“”替换“”
注:各变形方案若不冲突则可以同时使用,如“-cgi 1,6,8”表示同时使用第1、6、8号方案对HTTP请求进行变形。
2.示例:
xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -all -active -p
含义:检测xxx.xxx.1.1-xxx.xxx.255.255网段内主机的所有漏洞,跳过无响应的主机;
xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -port -smb -t 150 -o
含义:检测xxx.xxx.1.1-xxx.xxx.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机;
xscan -file hostlist.txt -port -cgi -t 200,5 -v -o
含义:检测“hostlist.txt”文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机;
七. 常见问题解答:
Q:如果没有安装WinPCap驱动程序是否能正常使用X-Scan进行扫描?
A:如果系统未安装WinPCap驱动,X-Scan启动后会自动安装WinPCap 2.3;如果系统已经安装了WinPCap更高版本,X-Scan则使用已有版本。“WinPCap 3.1 beta”中存在BUG,可能导致X-Scan扫描进程异常,建议使用“WinPCap 2.3”。
Q:扫描一个子网,进程里同时出现10个checkhost.exe的进程是什么原因?
A:检测每个主机都会单独起一个Checkhost.exe进程,检测完毕会自动退出。并发主机数量可以通过图形界面的设置窗口设定,命令行程序通过“-t”参数设定。
Q:扫描过程中机器突然蓝屏重启是什么原因?
A:扫描过程中系统蓝屏是有可能的,AtGuard、天网等防火墙的驱动程序在处理特殊包的时候有可能出错导致系统崩溃,另外很多防火墙驱动与WinPCap驱动本身也存在冲突,建议先禁止或卸载防火墙程序再试试。
Q:操作系统识别不正确是什么原因?
A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器没有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据库中,就需要使用者根据其他信息综合分析了。
Q:为什么在一次扫描中我选择了“SYN”方式进行端口扫描,但X-Scan实际采用的是“TCP”方式,而且也没有被动识别出目标操作系统?
A:端口扫描中的“SYN”方式和被动主机操作系统识别功能在NT4系统下无法使用,在windows 2000等系统下使用时必须拥有管理员权限,否则将自动改用“TCP”方式进行端口扫描。
Q:新版本是否兼容2.3版本的插件?
A:X-Scan 3.0的插件接口做了少量修改,不兼容2.3以前版本的插件,需要原作者做相应修改。3.0版本提供了简单的开发库,插件开发方面要比2.3版本轻松许多。
Q:X-Scan 3.0中“跳过没有响应的主机”具体含义是什么?
A:检测存活主机是由CheckActive插件完成的。如果X-Scan运行于NT4.0系统,只能通过ICMP Ping方式对目标主机进行检测,而在WIN2K以上版本的Windows系统下,若具备管理员权限则通过TCP Ping的方式进行存活性检测。
Q:我看到Scripts目录下有很多nessus的脚本,是否可以自己从nessus的网站上下载最新的plugin,然后解压到scripts目录中,实现扫描最新漏洞?
A:X-Scan移植了nessus的nasl引擎,目前对应于nessus2.0.10a。所以只要是这个版本的nessus支持的脚本,都可以复制到Scripts目录下加载,但需要在配置界面里把“NASL相关设置”页的“攻击脚本列表”框清空,或者通过“选择脚本”把新脚本加入列表。
Q:X-Scan中各项弱口令插件检测范围都很有限,能否自己加入其他需要检测的帐号或口令?
A:在“X-Scan”中内置的密码字典仅为简单示范,使用者如果希望软件有更强的密码猜解能力,可以自己编辑密码字典文件。
Q:为什么nasl脚本扫描结果中存在大量英文,将来有没有可能会对这些英文信息进行汉化?
A:目前已有将近2000个NASL脚本,里面的描述信息大都是英文,需要翻译的内容可以在本站“焦点项目”中的X-Scan下看到。欢迎大家一起帮忙翻译,通过审核后会直接加入在线升级库供大家下载。
Q:用xscan.exe在命令行方式下进行扫描时,如何暂停或终止扫描?
A:命令行方式检测过程中,按“[空格]”键可查看各线程状态及扫描进度,按“[回车]”可暂停或继续扫描,按“q”键可保存当前数据后提前退出程序,按“”强行关闭程序。
Q:位于dat目录下的wry.dll有什么用处?
A:wry.dll是“追捕”软件的地址查询数据库,用于X-Scan中文版查询物理地址并且得到了作者许可。在此对“追捕”软件作者及所有为建立此数据库作出贡献的朋友表示感谢。由于没有考虑和将来“追捕”数据库的兼容问题,不能保证能正确使用以后版本的“追捕”数据库。在“追捕”数据库文件格式没有改变的情况下,可以将新版本的数据库文件“wry.dll”拷贝到dat目录下替换旧版本文件,但建议在覆盖前备份旧文件。
Q:X-Scan如何安装,是否需要注册?
A:X-Scan是完全免费软件,无需注册,无需安装(解压缩即可运行,自动安装WinPCap驱动)。
八. 版本发布:
X-Scan v3.1 -- 发布日期:03/25/2004,修改“存活主机”插件,加入2.3版本中SNMP、NETBIOS插件,优化主程序及NASL库。
X-Scan v3.02 -- 发布日期:03/08/2004,“WinPCap 3.1 beta”中存在BUG,可能导致CheckHost.exe异常。X-Scan中改用“WinPCap 2.3”,建议卸载“WinPCap 3.1 beta”后再使用X-Scan进行扫描。
X-Scan v3.0 -- 发布日期:03/01/2004,修正beta版本中已知BUG,对主程序及所有插件进行优化,升级NASL库,支持2.0.10a版本以前的所有NASL脚本;提供简单的开发包方便其他朋友共同开发插件;其他插件正在开发中。
感谢悟休、quack帮忙精选nasl脚本列表,感谢san为支持X-Scan项目编写相关页面程序。再次感谢安全焦点论坛上所有提供优秀思路和协助测试的朋友们。
X-Scan v3.0(beta) -- 发布日期:12/30/2003,对主程序结构进行调整,加入移植的NASL插件,支持2.0.9版本以前的所有NASL脚本;对插件接口做少量修改,方便由其他朋友共同开发插件;对远程操作系统识别功能进行了加强,并去掉了一些可由脚本完成的插件。
感谢isno和Enfis提供优秀插件,感谢悟休、quack帮忙精选nasl脚本列表,也感谢其他提供优秀思路和协助测试的朋友。
X-Scan v2.3 -- 发布日期:09/29/2002,新增SSL插件,用于检测SSL漏洞;升级PORT、HTTP、IIS插件;升级图形界面并对界面风格作细微调整。
感谢ilsy提供优秀插件。
X-Scan v2.2 -- 发布日期:09/12/2002,修正PORT插件中线程同步BUG;修正RPC插件字符显示BUG;扩充RPC漏洞数据库;调整扫描结果索引文件风格。
感谢xundi、quack、stardust搜集并整理漏洞数据库。
X-Scan v2.1 -- 发布日期:09/08/2002,将SNMP插件扫描项目改为可选;将HTTP、IIS、RPC插件中的“漏洞描述”链接到xundi整理的漏洞数据库;修正2.0以前版本中已知BUG。
X-Scan v2.0 -- 发布日期:08/07/2002,新增路由信息检测、SNMP信息检测插件;升级NETBIOS插件,新增远程注册表信息检测;升级IIS插件,新增对IIS.ASP漏洞的检测;对插件接口做细微修改;更新图形界面,新增“在线升级”功能;扩充CGI漏洞数据库;修正1.3以前版本中已知BUG。
感谢quack、stardust、sinister、ilsy、santa、bingle、casper提供宝贵资料或优秀插件,感谢san、xundi、e4gle协助测试,也感谢所有来信反馈和提出建议的热心朋友。
X-Scan v1.3 -- 发布日期:12/11/2001,修正PORT插件中关于远程操作系统识别的BUG。
X-Scan v1.2 -- 发布日期:12/02/2001,升级HTTP、IIS插件,新增对HTTP重定向错误页面识别功能;升级PORT插件,在无法创建Raw Socket时改为使用标准TCP连接方式检测开放端口。
X-Scan v1.1 -- 发布日期:11/25/2001,将所有检测功能移入插件,使主程序完全成为“容器”;提供多语言支持;更新图形接口程序;修改多线程模式,所有插件共享最大线程数量,提高并发检测速度;新增SMTP、POP3弱口令用户检测;新增IIS UTF-Code漏洞检测;扩充CGI漏洞列表。
感谢xundi、quack、casper、wollf、黄承等朋友提供的宝贵资料,感谢echo、力立等朋友协助测试,再次向付出了重体力劳动的xundi和quack致谢,涕零.....
X-Scan v1.0(beta) -- 发布日期:07/12/2001,新增对远程操作系统类型及版本识别功能;新增对远程主机地理位置查询功能;在“-iis”选项中,新增对IIS “.ida/.idq”漏洞的扫描,同时更新漏洞描述;在“-port”参数中,允许指定扫描的端口范围(通过修改“dat\config.ini”文件中的“[PORT-LIST]\port=”);在“-ntpass”参数中,允许用户在编辑密码字典时通过“%”通配所有用户名;更新CGI漏洞列表,并对CGI漏洞进行分类,以便根据远程主机系统类型扫描特定CGI漏洞,加快扫描速度。
感谢“天眼”软件作者--watercloud提供“被动识别远程操作系统”模块;感谢“追捕”软件作者--冯志宏提供“IP-地理位置”数据库;感谢quack提供漏洞资料、程序资料、无数有价值的建议还有感情和......
X-Scanner v0.61 -- 发布日期:05/17/2001,在“-iis”选项中新增对IIS CGI文件名二次解码漏洞的检测。
X-Scanner v0.6 -- 发布日期:05/15/2001,新增“-iis”参数,专门用于扫描IIS服务器的“unicode”及“remote .printer overflow”漏洞;更新漏洞描述;调整CGI扫描的超时时间,尽量避免因超时导致的“扫描未完成”情况出现;为避免“RedV”插件被恶意利用,将自动更换主页功能改为自动向“C:\”目录上传包含警告信息的文本文件。
X-Scanner v0.5 -- 发布日期:04/30/2001,修改了命令行参数,使参数含义更加直观;扩充CGI漏洞数据库;对NT弱口令扫描功能进行扩充--允许用户使用用户名及密码字典;增加插件功能,并公布插件接口。
感谢“santa”和“老鬼(colossus)”提供插件。
X-Scanner v0.42b -- 发布日期:03/07/2001,修正了“-b”选项在特定情况导致系统overflow的BUG。
X-Scanner v0.42 -- 发布日期:03/02/2001,允许用户对SQL-SERVER帐户进行扩充,而不局限于扫描“sa”空口令。
X-Scanner v0.41 -- 发布日期:02/19/2001,修正了以前版本中对FTP弱口令检测的BUG;重新优化代码,将xscan.exe与xscan98合二为一。
X-Scanner v0.4 -- 发布日期:02/15/2001,加入对SQL-SERVER
默认
“sa”帐户的扫描;在充分认识了某些人的惰性之后,临时制作了傻瓜式图形界面(一切操作按序号点击即可)。
X-Scanner v0.31 -- 发布日期:01/17/2001,对端口扫描方式和输出文件的格式做了细微调整;对Unicode解码漏洞进行了扩充;提供了for win98的版本和一个简单的CGI列表维护工具。
X-Scanner v0.3 -- 发布日期:12/27/2000,加入线程超时限制;增加代理功能;扩充CGI漏洞数据库,加入对Unicode解码等漏洞的检测及描述;修正内存泄露问题。内部测试版。
X-Scanner v0.2 -- 发布日期:12/12/2000,内部测试版。
九. 后序:
X-Scan是一个完全免费软件,其中的漏洞资料和整体功能都存在严重不足,各项功能的测试受时间及环境所限也不够全面。只有靠朋友们积极提供相关资料,或提出自己的建议及想法,才能把X-Scan做得更好。欢迎大家来信或访问我们的站点参与交流。
感谢安全焦点和uid0小组全体成员、前DarkSun部分成员的鼎力支持,同时也因个人资质问题向大家致歉。 --glacier_at_xfocus_dot_org
_____________________________________________________________________
使用过程中如有问题、建议或发现错误请发邮件至:xscan_at_xfocus_dot_org
EXE工具 telnet exe远程登陆
Telnet协议是TCP IP协议族中的一员 是Internet远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 用它连接到服务器
一 运行telnet的方法
当运行远程登录时 应首先运行Telnet程序进行联机 有两种运行Telnet的方法:
1 运行telnet的第一种方法:
输入下列命令 并以回车换行结束 下同
命令格式:telnet 主机网络地址
例如:假设用户要连接一台名叫dns的计算机 它的网络地址为xxxx IP地址为202 197 96 1 则连接时应输入命令telnet xxxx或telnet 202 197 96 1
如果用户要登录的主机与用户的计算机在同一个本地网上 通常可以只输入主机的名字 而不用输入完整的地址 例如上例可以输入:
命令:telnet dns
2 运行telnet程序的第二种方法:
输入命令:telnet
此时程序运行 但并未进行连接 因未指明主机
然后屏幕显示:telnet>
这是telnet的提示符 它表明telnet程序已经运行 并正在等待用户输入使用telnet的命令 如要连接一台远程主机 则使用open命令 即输入命令open 并附上该主机的网络地址 如
telnet> open xxxx
其连接效果与第一种方法完全一样
假如Telnet的运行不能与主机确定连接 则用户将会看到主机找不到的信息 例如 假设用户想要连接的远程主机为yyyy 而用户的输入为:
telnet yyyy
则在屏幕上用户将会看到:
yyyy: unknown host
telnet>
此时 用户可以另输入正确的主机名进行连接 或者用Quit命令中止telnet程序的执行 导致telnet不能与远程主机连接的因素很多 常见的因素有三类:计算机地址输入有错 如上面例子所示;远程计算机暂时不能使用 如发生故障等 ;用户指定的计算机不在Internet上 处理这类情况的主要办法包括重新联机 隔一段时间再试等 对不在Internet上的计算机 使用当然是比较困难的
二 确认终端的仿真类型
终端仿真 terminal emulation 的类型直接影响到数据如何在自己使用的计算机上的显示 类型确定不正确 读者可能无法认读网络终端上显示的信息 这就是远程登录要确认网络终端类型的原因
对方系统一般以提问方式让读者确认自己所使用的计算机的终端仿真类型 如
Terminal emulation
“ ”表示光标 在此读者只要键入相应的终端仿真类型即可
最
常用
的终端仿真为VT100 许多系统因此把VT100作为
默认
值 default 有的系统列举出各种终端仿真类型供用户选择 如果用户不清楚自己所用的终端仿真类型 可用dumb 哑终端 代之 另外 也有些系统会自动地为用户确认终端仿真类型 这对用户来说当然是最省心的
如果用户使用的是PC机 最好的回答通常是ANS1 因为大多数PC机的终端程序使用的ANS1终端协议
三 登录与退出对方系统:
当对方主机接通以后 就应登录到对方系统 如果登录标识和密码被对方系统接收并确认无误 用户就进入了对方系统 成了对方主机系统的一个远程终端使用者 进一步的工作如何进行 完全取决于主机系统的应用软件功能和用户的要求 用户只要按照系统的提示和操作程序进行操作 一般说来都可以完成自己预期的工作 退出对方系统有以下几种情况:
1 正常退出对方系统
这需要用户随时了解系统显示的信息 密切注意它显示的正常退出系统的命令 以便需要时使用 按照系统提示的方法退出该系统 实际上也就退出了Telnet 此时 用户又回到了本地机系统
2 记住强行退出对方系统的命令 换码符 在远程登录时 有时需要强行退出对方系统 这时可使用换码符 Escape Character 系统
默认
的换码符一般为“^ ]” 即CTRL键和 ]键同时按下 按此组合键即可终止联机 并显示下列提示符:
Telnet>
可输入close或quit命令来终止远程登录 换码符的使用看起来无关紧要 但实际上在使用远程登录功能时是不可忽略的 它是使用Telnet时处理异常状态的重要手段 当无法用正常手段退出系统时 只要键入换码符即可平安退出Telnet并返回用户的本地计算机系统
3 Telnet的
常用
命令
任何时候 在telnet>提示符之后 都可以有选择地使用telnet的各种命令 以完成特定的功能 telnet的命令可通过help命令来了解它们的使用方法
以下是telnet的基本命令 对于不同的操作系统来说 这些命令也会稍有不同
常用
命令及功能简介:
help 联机求助
open 后接IP地址或域名即可进行远程登录
close 正常结束远程会话 回到命令方式
display 显示工作参数
mode 进入行命令或字符方式
send 向远程主机传送特殊字符 键入send 可显示详细字符
set 设置工作参数 键入set 可显示详细参数
status 显示状态信息
toggle 改变工作参数 键入toggle 可显示详细参数
^ ] 换码符 escape character 在异常情况下退出会话 回到命令方式
quit 退出telnet 返回本地机
z 使telnet进入暂停状态
<cr> 结束命令方式 返回telnet的会话方式
6 2 3 Windows下telnet的软件使用
Telnet的用户软件有许多版本 一些运行在DOS下的Telnet软件操作比较复杂 要记的命令也比较多 鉴于目前大部分用户都通过SLIP PPP 帐号与Internet联接 我们仅介绍运行于Windows下的Telnet软件 Windows 95内置的远程登录客户端应用程序是一个很简单的终端软件 但基本的远程登录功能都有了 如果你在某个Unix机器上有帐号 那么就可以远程登录到该主机 例如登录湖大的一台Unix邮件服务器 在“开始”->“运行”窗口中输入:
telnet xxxx
这时会弹出一个窗口:
窗口内有远程机器系统的提示 并在最后一行有“login:” 键入用户名后 出现“password:”提示 再输入该机器上对应该帐号的口令 就可以进入系统 拨号的Windows 95计算机就成了远程Unix机器的一个远程终端
你可以对Telnet程序做一些设置 主要有:在弹出的窗口中打开“终端”菜单“首选项” 终端选项:
本地响应:选择该复选框则设置Telnet程序中的键盘输入在本地也显示
默认
不选 ;
闪烁光标 块状光标 VT100箭头:选择光标类型;
缓冲区大小:
设置Telnet显示窗口的高度 根据需要可增加和减少 例如改为99;
可选择VT52或者VT100 ANSI终端类型
另外 你还可以设置使用的字体与显示的颜色等
如果在进行删除操作时使用“Backspace”或“Delete”键无效 反而在后面追加了“^H”或“^ ”字符 这是终端方式设置不对 可以更改仿真类型为“VT100 ANSI” 如果还不能使用这两个删除键之一 请使用“Ctrl”+“Backspace”或“Delete”键试一下 也可以在Unix的提示符下输入“stty erase ^H” 这里“^H”是按“Backspace”键出现的显示 以后就可以使用“Backspace”来删除输入出错的字符了
你可以使用Telnet程序提供的“终端” >“开始记录”功能记录你使用Telnet的全过程 选中后屏幕弹出文件窗口 提示输入记录文件名称 输
入完毕 开始Telnet的操作 操作完成后再选择“终端” >“停止记录”项 关闭记录文件
断开远程登录有两种方法 在Unix的$提示符下输入exit 这时提示与远程系统断开 或者是使用“连接”菜单的“断开”项断开 断开后 Telnet 窗口并不消失 再次连接时可用“连接”菜单的“远程系统” 宿主名称输入远程主机名 端口采用标准的Telnet端口或23 终端类型一般采用
默认
的 “vt100” 单击“连接”按钮即可重新连接 ">EXE工具 telnet exe远程登陆
Telnet协议是TCP IP协议族中的一员 是Internet远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 用它连接到服务器
端口号
标识了一个主机上进行通信的不同的应用程序。
1.HTTP协议代理服务器
常用
端口号
:80/8080/3128/8081/9098
2.SOCKS代理协议服务器
常用
端口号
:1080
3.FTP(文件传输)协议代理服务器
常用
端口号
:21
4.Telnet(远程登录)协议代理服务器
常用
端口号
:23
HTTP服务器,
默认
端口号
为80/tcp(木马Executor开放此端口)
HTTPS(securely transferring web pages)服务器,
默认
端口号
为443/tcp 443/udp
端口号
的范围是从1~65535
其中1~1024是被RFC 3232规定好了的,被称作“众所周知的端口”(Well Known Ports);
从1025~65535的端口被称为动态端口(Dynamic Ports),可用来建立与其它主机的会话,也可由用户自定义用途。
一些常见的
默认
端口号
及其用途如下:
远程连接服务端口
21端口:FTP 文件传输服务 未授权访问(匿名登录),弱口令爆破
22端口:SSH 远程连接服务 安全登录型 爆破,shh内网代理转发,文件传输 弱口令
23端口:TELNET 终端
port:
端口号
,
默认
是15212.SQL Server
port:
端口号
,
默认
是14333.MySQL
port:
端口号
,
默认
是33064.pointbase
port:
端口号
,
默认
是90925.DB2
port:
端口号
,
默认
是50006.Sybase
port:
端口号
,
默认
是50007.PostgreSQL
port:
端口号
,
默认
是5432NOSQL数据库
1.MongoDB
port:
默认
端口号
,270172.Redis
port:
默认
端口号
,63793.memcache
A 192.168.75.18 255.255.255.240
B 192.168.75.146 255.255.255.240
C 192.168.75.158 255.255.255.240
D 192.168.75.161 255.255.255.240
E 192.168.75.173 255.255.255.240
【问题1】5台主机A、B、C、D、E分属( )个网段?哪些主机位于同一网段?
【问题2】主机D的网络地址为多少?( )
【问题3】若要加入第六台主机F,使它能与主机A属于同一网段,其IP地址范围是多少?( )~( )(192.168.75.18 除外)
【问题4】若在网络中另加入一台主机,其IP地址设为192.168.75.164,它的广播地址是多少( )?能够收到的主机有( )和( )。
【问题5】若在该网络地址块中采用VLAN技术划分子网,何种设备能实现VLAN之间的数据转发?( )
我的答案:
3 B和D同一网段,D和E同一网段
192.168.75.160
192.168.75.17
192.168.75.30
192.168.75.175
OSI环境中负责处理语义的是( )层,负责处理语法的是____层,下面各层负责信息从源到目的地的有序移动。
我的答案:
网络操作系统是( )和( )的接口,它管理计算机的( ) 和( )资源,为用户提供文件共享、打印共享等各种网络服务以及电子邮件、WWW等专项服务。
我的答案:
计算机网络
某单位局域网通过ISP提供的宽带线路与Internet相连,ISP分配的公网IP地址为202.117.12.32/29,局域网中一部分计算机通过代理服务器访问Internet,而另一部分计算机不经过代理服务器直接访问Internet。其网络连接方式及相关的网络参数如下图所示。
1-1.jpg
【问题1】根据图上图所给出的网络连接方式及相关的网络参数,区域(A)与区域(B)中计算机的网络参数配置为:
区域(A)计算机“IP地址”(范围): (1 ) ;
区域(A)计算机“子网掩码”: (2 ) ;
区域(A)计算机“
默认
网关”: (3 ) ;
区域(B)计算机“IP地址”(范围): (4 ) ;
区域(B)计算机“子网掩码”: (5 ) ;
区域(B)计算机“
默认
网关”: (6 ) 。
【问题2】上图中代理服务器还可以用何种网络连接设备实现?(7 )
【问题3】在接入Internet时,区域(A)与区域(B)相比,哪个区域的计算机安全性更好?(8 )
【问题4】IP地址为192.168.0.36的计算机发送到Internet上的IP数据包的源IP地址为 (9 ) ;IP地址为202.117.12.36的计算机发送到Internet上的IP数据包的源IP地址为(10 ) 。
路由器处于用户命令状态,这时用户可以看路由器的连接状态,访问其它网络和主机,但不能看到和更改路由器的设置内容。
2. router#
在router>提示符下键入enable,路由器进入特权命令状态router#,这时不但可以执行所有的用户命令,还可以看到和更改路由器的设置内容。
3. router(config)#
在router#提示符下键入configure terminal,出现提示符router(config)#,此时路由器处于全局设置状态,这时可以设置路由器的全局参数。
4. router(config-if)#; router(config-line)#; router(config-router)#;…
路由器处于局部设置状态,这时可以设置路由器某个局部的参数。
路由器处于RXBOOT状态,在开机后60秒内按ctrl-break可进入此状态,这时路由器不能完成正常的功能,只能进行软件升级和手工引导。
6. 设置对话状态
这是一台新路由器开机时自动进入的状态,在特权命令状态使用SETUP命令也可进入此状态,这时可通过对话方式对路由器进行设置。
三、设置对话过程
1. 显示提示信息
2. 全局参数的设置
3. 接口参数的设置
4. 显示结果
利用设置对话过程可以避免手工输入命令的烦琐,但它还不能完全代替手工设置,一些特殊的设置还必须通过手工输入的方式完成。
进入设置对话过程后,路由器首先会显示一些提示信息:
--- System Configuration Dialog ---
At any point you may enter a question mark '?' for help.
Use ctrl-c to abort configuration dialog at any prompt.
Default settings are in square brackets '[]'.
这是告诉你在设置对话过程中的任何地方都可以键入“?”得到系统的帮助,按ctrl-c可以退出设置过程,缺省设置将显示在‘[]’中。然后路由器会问是否进入设置对话:
Would you like to enter the initial configuration dialog? [yes]:
如果按y或回车,路由器就会进入设置对话过程。首先你可以看到各端口当前的状况:
First, would you like to see the current interface summary? [yes]:
Any interface listed with OK? value "NO" does not have a valid configuration
Interface IP-Address OK? Method Status Protocol
Ethernet0 unassigned NO unset up up
Serial0 unassigned NO unset up up
……… ……… … …… … …
然后,路由器就开始全局参数的设置:
Configuring global parameters:
1.设置路由器名:
Enter host name [Router]:
2.设置进入特权状态的密文(secret),此密文在设置以后不会以明文方式显示:
The enable secret is a one-way cryptographic secret used
instead of the enable password when it exists.
Enter enable secret: cisco
3.设置进入特权状态的密码(password),此密码只在没有密文时起作用,并且在设置以后会以明文方式显示:
The enable password is used when there is no enable secret
and when using older software and some boot images.
Enter enable password: pass
4.设置虚拟终端访问时的密码:
Enter virtual terminal password: cisco
5.询问是否要设置路由器支持的各种网络协议:
Configure SNMP Network Management? [yes]:
Configure DECnet? [no]:
Configure AppleTalk? [no]:
Configure IPX? [no]:
Configure IP? [yes]:
Configure IGRP routing? [yes]:
Configure RIP routing? [no]:
6.如果配置的是拨号访问服务器,系统还会设置异步口的参数:
Configure Async lines? [yes]:
1) 设置线路的最高速度:
Async line speed [9600]:
2) 是否使用硬件流控:
Configure for HW flow control? [yes]:
3) 是否设置modem:
Configure for modems? [yes/no]: yes
4) 是否使用
默认
的modem命令:
Configure for default chat script? [yes]:
5) 是否设置异步口的PPP参数:
Configure for Dial-in IP SLIP/PPP access? [no]: yes
6) 是否使用动态IP地址:
Configure for Dynamic IP addresses? [yes]:
7) 是否使用缺省IP地址:
Configure Default IP addresses? [no]: yes
8) 是否使用TCP头压缩:
Configure for TCP Header Compression? [yes]:
9) 是否在异步口上使用路由表更新:
Configure for routing updates on async links? [no]: y
10) 是否设置异步口上的其它协议。
接下来,系统会对每个接口进行参数的设置。
1.Configuring interface Ethernet0:
1) 是否使用此接口:
Is this interface in use? [yes]:
2) 是否设置此接口的IP参数:
Configure IP on this interface? [yes]:
3) 设置接口的IP地址:
IP address for this interface: 192.168.162.2
4) 设置接口的IP子网掩码:
Number of bits in subnet field [0]:
Class C network is 192.168.162.0, 0 subnet bits; mask is /24
在设置完所有接口的参数后,系统会把整个设置对话过程的结果显示出来:
The following configuration command script was created:
hostname Router
enable secret 5 $1$W5Oh$p6J7tIgRMBOIKVXVG53Uh1
enable password pass
请注意在enable secret后面显示的是乱码,而enable password后面显示的是设置的内容。
显示结束后,系统会问是否使用这个设置:
Use this configuration? [yes/no]: yes
如果回答yes,系统就会把设置的结果存入路由器的NVRAM中,然后结束设置对话过程,使路由器开始正常的工作。
四、
常用
命令
1. 帮助
在IOS操作中,无论任何状态和位置,都可以键入“?”得到系统的帮助。
2. 改变命令状态
任务 命令
进入特权命令状态 enable
退出特权命令状态 disable
进入设置对话状态 setup
进入全局设置状态 config terminal
退出全局设置状态 end
进入端口设置状态 interface type slot/number
进入子端口设置状态 interface type number.subinterface [point-to-point | multipoint]
进入线路设置状态 line type slot/number
进入路由设置状态 router protocol
退出局部设置状态 exit
3. 显示命令
任务 命令
查看版本及引导信息 show version
查看运行设置 show running-config
查看开机设置 show startup-config
显示端口信息 show interface type slot/number
显示路由信息 show ip router
4. 拷贝命令
用于IOS及CONFIG的备份和升级
5. 网络命令
任务 命令
登录远程主机 telnet hostname|IP address
网络侦测 ping hostname|IP address
路由跟踪 trace hostname|IP address
6. 基本设置命令
任务 命令
全局设置 config terminal
设置访问用户及密码 username username password password
设置特权密码 enable secret password
设置路由器名 hostname name
设置静态路由 ip route destination subnet-mask next-hop
启动IP路由 ip routing
启动IPX路由 ipx routing
端口设置 interface type slot/number
设置IP地址 ip address address subnet-mask
设置IPX网络 ipx network network
激活端口 no shutdown
物理线路设置 line type number
启动登录进程 login [local|tacacs server]
设置登录密码 password password
五、配置IP寻址
1. IP地址分类
IP地址分为网络地址和主机地址二个部分,A类地址前8位为网络地址,后24位为主机地址,B类地址16位为网络地址,后16位为主机地址,C类地址前24位为网络地址,后8位为主机地址,网络地址范围如下表所示:
种类 网络地址范围
A 1.0.0.0 到126.0.0.0有效 0.0.0.0 和127.0.0.0保留
B 128.1.0.0到191.254.0.0有效 128.0.0.0和191.255.0.0保留
C 192.0.1.0 到223.255.254.0有效 192.0.0.0和223.255.255.0保留
D 224.0.0.0到239.255.255.255用于多点广播
E 240.0.0.0到255.255.255.254保留 255.255.255.255用于广播
2. 分配接口IP地址
任务 命令
接口设置 interface type slot/number
为接口设置IP地址 ip address ip-address mask
掩玛(mask)用于识别IP地址中的网络地址位数,IP地址(ip-address)和掩码(mask)相与即得到网络地址。
3. 使用可变长的子网掩码
通过使用可变长的子网掩码可以让位于不同接口的同一网络编号的网络使用不同的掩码,这样可以节省IP地址,充分利用有效的IP地址空间。
如下图所示:
Router1和Router2的E0端口均使用了C类地址192.1.0.0作为网络地址,Router1的E0的网络地址为192.1.0.128,掩码为255.255.255.192, Router2的E0的网络地址为192.1.0.64,掩码为255.255.255.192,这样就将一个C类网络地址分配给了二个网,既划分了二个子网,起到了节约地址的作用。
4. 使用网络地址翻译(NAT)
NAT(Network Address Translation)起到将内部私有地址翻译成外部合法的全局地址的功能,它使得不具有合法IP地址的用户可以通过NAT访问到外部Internet.
当建立内部网的时候,建议使用以下地址组用于主机,这些地址是由Network Working Group(RFC 1918)保留用于私有网络地址分配的.
l Class A:10.1.1.1 to 10.254.254.254
l Class B:172.16.1.1 to 172.31.254.254
l Class C:192.168.1.1 to 192.168.254.254
命令描述如下:
任务 命令
定义一个标准访问列表 access-list access-list-number permit source [source-wildcard]
定义一个全局地址池 ip nat pool name start-ip end-ip {netmask netmask | prefix-length prefix-length} [type rotary]
建立动态地址翻译 ip nat inside source {list {access-list-number | name} pool name [overload] | static local-ip global-ip}
指定内部和外部端口 ip nat {inside | outside}
如下图所示,
路由器的Ethernet 0端口为inside端口,即此端口连接内部网络,并且此端口所连接的网络应该被翻译,Serial 0端口为outside端口,其拥有合法IP地址(由NIC或服务提供商所分配的合法的IP地址),来自网络10.1.1.0/24的主机将从IP地址池c2501中选择一个地址作为自己的合法地址,经由Serial 0口访问Internet。命令ip nat inside source list 2 pool c2501 overload中的参数overload,将允许多个内部地址使用相同的全局地址(一个合法IP地址,它是由NIC或服务提供商所分配的地址)。命令ip nat pool c2501 202.96.38.1 202.96.38.62 netmask 255.255.255.192定义了全局地址的范围。
设置如下:
ip nat pool c2501 202.96.38.1 202.96.38.62 netmask 255.255.255.192
interface Ethernet 0
ip address 10.1.1.1 255.255.255.0
ip nat inside
interface Serial 0
ip address 202.200.10.5 255.255.255.252
ip nat outside
ip route 0.0.0.0 0.0.0.0 Serial 0
access-list 2 permit 10.0.0.0 0.0.0.255
! Dynamic NAT
ip nat inside source list 2 pool c2501 overload
line console 0
exec-timeout 0 0
line vty 0 4
六、配置静态路由
通过配置静态路由,用户可以人为地指定对某一网络访问时所要经过的路径,在网络结构比较简单,且一般到达某一网络所经过的路径唯一的情况下采用静态路由。
任务 命令
建立静态路由 ip route prefix mask {address | interface} [distance] [tag tag] [permanent]
Prefix :所要到达的目的网络
mask :子网掩码
address :下一个跳的IP地址,即相邻路由器的端口地址。
interface :本地网络接口
distance :管理距离(可选)
tag tag :tag值(可选)
permanent :指定此路由即使该端口关掉也不被移掉。
以下在Router1上设置了访问192.1.0.64/26这个网下一跳地址为192.200.10.6,即当有目的地址属于192.1.0.64/26的网络范围的数据报,应将其路由到地址为192.200.10.6的相邻路由器。在Router3上设置了访问192.1.0.128/26及192.200.10.4/30这二个网下一跳地址为192.1.0.65。由于在Router1上端口Serial 0地址为192.200.10.5,192.200.10.4/30这个网属于直连的网,已经存在访问192.200.10.4/30的路径,所以不需要在Router1上添加静态路由。
Router1:
ip route 192.1.0.64 255.255.255.192 192.200.10.6
Router3:
ip route 192.1.0.128 255.255.255.192 192.1.0.65
ip route 192.200.10.4 255.255.255.252 192.1.0.65
同时由于路由器Router3除了与路由器Router2相连外,不再与其他路由器相连,所以也可以为它赋予一条
默认
路由以代替以上的二条静态路由,
ip route 0.0.0.0 0.0.0.0 192.1.0.65
即只要没有在路由表里找到去特定目的地址的路径,则数据均被路由到地址为192.1.0.65的相邻路由器。
一、HDLC
HDLC是CISCO路由器使用的缺省协议,一台新路由器在未指定封装协议时
默认
使用HDLC封装。
1. 有关命令
任务 命令
设置HDLC封装 encapsulation hdlc
设置DCE端线路速度 clockrate speed
复位一个硬件接口 clear interface serial unit
显示接口状态 show interfaces serial [unit] 1
注:1.以下给出一个显示Cisco同步串口状态的例子.
Router#show interface serial 0
Serial 0 is up, line protocol is up
Hardware is MCI Serial
Internet address is 150.136.190.203, subnet mask is 255.255.255.0
MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec, rely 255/255, load 1/255
Encapsulation HDLC, loopback not set, keepalive set (10 sec)
Last input 0:00:07, output 0:00:00, output hang never
Output queue 0/40, 0 drops; input queue 0/75, 0 drops
Five minute input rate 0 bits/sec, 0 packets/sec
Five minute output rate 0 bits/sec, 0 packets/sec
16263 packets input, 1347238 bytes, 0 no buffer
Received 13983 broadcasts, 0 runts, 0 giants
2 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 2 abort
22146 packets output, 2383680 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets, 0 restarts
1 carrier transitions
2. 举例
进入controller配置模式 controller {t1 | e1} number
选择帧类型 framing {crc4 | no-crc4}
选择line-code类型 linecode {ami | b8zs | hdb3}
建立逻辑通道组与时隙的映射 channel-group number timeslots range1
显示controllers接口状态 show controllers e1 [slot/port]2
注: 1. 当链路为T1时,channel-group编号为0-23, Timeslot范围1-24; 当链路为E1时, channel-group编号为0-30, Timeslot范围1-31.
2.使用show controllers e1观察controller状态,以下为帧类型为crc4时controllers正常的状态.
Router# show controllers e1
e1 0/0 is up.
Applique type is Channelized E1 - unbalanced
Framing is CRC4, Line Code is HDB3 No alarms detected.
Data in current interval (725 seconds elapsed):
0 Line Code Violations, 0 Path Code Violations
0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins
0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs
Total Data (last 24 hours) 0 Line Code Violations, 0 Path Code Violations,
0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins,
0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs
以下例子为E1连接3条64K专线, 帧类型为NO-CRC4,非平衡链路,路由器具体设置如下:
shanxi#wri t
Building configuration...
Current configuration:
version 11.2
no service udp-small-servers
no service tcp-small-servers
hostname shanxi
enable secret 5 $1$XN08$Ttr8nfLoP9.2RgZhcBzkk/
enable password shanxi
ip subnet-zero
controller E1 0
framing NO-CRC4
channel-group 0 timeslots 1
channel-group 1 timeslots 2
channel-group 2 timeslots 3
interface Ethernet0
ip address 133.118.40.1 255.255.0.0
media-type 10BaseT
interface Ethernet1
no ip address
shutdown
interface Serial0:0
ip address 202.119.96.1 255.255.255.252
no ip mroute-cache
interface Serial0:1
ip address 202.119.96.5 255.255.255.252
no ip mroute-cache
interface Serial0:2
ip address 202.119.96.9 255.255.255.252
no ip mroute-cache
no ip classless
ip route 133.210.40.0 255.255.255.0 Serial0:0
ip route 133.210.41.0 255.255.255.0 Serial0:1
ip route 133.210.42.0 255.255.255.0 Serial0:2
line con 0
line aux 0
line vty 0 4
password shanxi
login
广域网设置:
一、HDLC
HDLC是CISCO路由器使用的缺省协议,一台新路由器在未指定封装协议时
默认
使用HDLC封装。
1. 有关命令
任务 命令
设置HDLC封装 encapsulation hdlc
设置DCE端线路速度 clockrate speed
复位一个硬件接口 clear interface serial unit
显示接口状态 show interfaces serial [unit] 1
注:1.以下给出一个显示Cisco同步串口状态的例子.
Router#show interface serial 0
Serial 0 is up, line protocol is up
Hardware is MCI Serial
Internet address is 150.136.190.203, subnet mask is 255.255.255.0
MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec, rely 255/255, load 1/255
Encapsulation HDLC, loopback not set, keepalive set (10 sec)
Last input 0:00:07, output 0:00:00, output hang never
Output queue 0/40, 0 drops; input queue 0/75, 0 drops
Five minute input rate 0 bits/sec, 0 packets/sec
Five minute output rate 0 bits/sec, 0 packets/sec
16263 packets input, 1347238 bytes, 0 no buffer
Received 13983 broadcasts, 0 runts, 0 giants
2 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 2 abort
22146 packets output, 2383680 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets, 0 restarts
1 carrier transitions
2. 举例
进入controller配置模式 controller {t1 | e1} number
选择帧类型 framing {crc4 | no-crc4}
选择line-code类型 linecode {ami | b8zs | hdb3}
建立逻辑通道组与时隙的映射 channel-group number timeslots range1
显示controllers接口状态 show controllers e1 [slot/port]2
注: 1. 当链路为T1时,channel-group编号为0-23, Timeslot范围1-24; 当链路为E1时, channel-group编号为0-30, Timeslot范围1-31.
2.使用show controllers e1观察controller状态,以下为帧类型为crc4时controllers正常的状态.
Router# show controllers e1
e1 0/0 is up.
Applique type is Channelized E1 - unbalanced
Framing is CRC4, Line Code is HDB3 No alarms detected.
Data in current interval (725 seconds elapsed):
0 Line Code Violations, 0 Path Code Violations
0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins
0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs
Total Data (last 24 hours) 0 Line Code Violations, 0 Path Code Violations,
0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins,
0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs
以下例子为E1连接3条64K专线, 帧类型为NO-CRC4,非平衡链路,路由器具体设置如下:
shanxi#wri t
Building configuration...
Current configuration:
version 11.2
no service udp-small-servers
no service tcp-small-servers
hostname shanxi
enable secret 5 $1$XN08$Ttr8nfLoP9.2RgZhcBzkk/
enable password shanxi
ip subnet-zero
controller E1 0
framing NO-CRC4
channel-group 0 timeslots 1
channel-group 1 timeslots 2
channel-group 2 timeslots 3
interface Ethernet0
ip address 133.118.40.1 255.255.0.0
media-type 10BaseT
interface Ethernet1
no ip address
shutdown
interface Serial0:0
ip address 202.119.96.1 255.255.255.252
no ip mroute-cache
interface Serial0:1
ip address 202.119.96.5 255.255.255.252
no ip mroute-cache
interface Serial0:2
ip address 202.119.96.9 255.255.255.252
no ip mroute-cache
no ip classless
ip route 133.210.40.0 255.255.255.0 Serial0:0
ip route 133.210.41.0 255.255.255.0 Serial0:1
ip route 133.210.42.0 255.255.255.0 Serial0:2
line con 0
line aux 0
line vty 0 4
password shanxi
login
二、PPP
PPP(Point-to-Point Protocol)是SLIP(Serial Line IP protocol)的继承者,它提供了跨过同步和异步电路实现路由器到路由器(router-to-router)和主机到网络(host-to-network)的连接。
CHAP(Challenge Handshake Authentication Protocol)和PAP(Password Authentication Protocol) (PAP)通常被用于在PPP封装的串行线路上提供安全性认证。使用CHAP和PAP认证,每个路由器通过名字来识别,可以防止未经授权的访问。
CHAP和PAP在RFC 1334上有详细的说明。
1. 有关命令
任务 命令
设置PPP封装 encapsulation ppp1
设置认证方法 ppp authentication {chap | chap pap | pap chap | pap} [if-needed][list-name | default] [callin]
指定口令 username name password secret
设置DCE端线路速度 clockrate speed
注:1、要使用CHAP/PAP必须使用PPP封装。在与非Cisco路由器连接时,一般采用PPP封装,其它厂家路由器一般不支持Cisco的HDLC封装协议。
2. 举例
路由器Router1和Router2的S0口均封装PPP协议,采用CHAP做认证,在Router1中应建立一个用户,以对端路由器主机名作为用户名,即用户名应为router2。同时在Router2中应建立一个用户,以对端路由器主机名作为用户名,即用户名应为router1。所建的这两用户的password必须相同。
设置如下:
Router1:
hostname router1
username router2 password xxx
interface Serial0
ip address 192.200.10.1 255.255.255.0
clockrate 1000000
ppp authentication chap
Router2:
hostname router2
username router1 password xxx
interface Serial0
ip address 192.200.10.2 255.255.255.0
ppp authentication chap
三、x.25
1. X25技术
X.25规范对应OSI三层,X.25的第三层描述了分组的格式及分组交换的过程。X.25的第二层由LAPB(Link Access Procedure, Balanced)实现,它定义了用于DTE/DCE连接的帧格式。X.25的第一层定义了电气和物理端口特性。
X.25网络设备分为数据终端设备(DTE)、数据电路终端设备(DCE)及分组交换设备(PSE)。DTE是X.25的末端系统,如终端、计算机或网络主机,一般位于用户端,Cisco路由器就是DTE设备。DCE设备是专用通信设备,如调制解调器和分组交换机。PSE是公共网络的主干交换机。
X.25定义了数据通讯的电话网络,每个分配给用户的x.25 端口都具有一个x.121地址,当用户申请到的是SVC(交换虚电路)时,x.25一端的用户在访问另一端的用户时,首先将呼叫对方x.121地址,然后接收到呼叫的一端可以接受或拒绝,如果接受请求,于是连接建立实现数据传输,当没有数据传输时挂断连接,整个呼叫过程就类似我们拨打普通电话一样,其不同的是x.25可以实现一点对多点的连接。其中x.121地址、htc均必须与x.25服务提供商分配的参数相同。X.25 PVC(永久虚电路),没有呼叫的过程,类似DDN专线。
2. 有关命令:
任务 命令
设置X.25封装 encapsulation x25 [dce]
设置X.121地址 x25 address x.121-address
设置远方站点的地址映射 x25 map protocol address [protocol2 address2[...[protocol9 address9]]] x121-address [option]
设置最大的双向虚电路数 x25 htc citcuit-number1
设置一次连接可同时建立的虚电路数 x25 nvc count2
设置x25在清除空闲虚电路前的等待周期 x25 idle minutes
重新启动x25,或清一个svc,启动一个pvc相关参数 clear x25 {serial number | cmns-interface mac-address} [vc-number] 3
清x25虚电路 clear x25-vc
显示接口及x25相关信息 show interfaces serial show x25 interface show x25 map show x25 vc
注:1、虚电路号从1到4095,Cisco路由器
默认
为1024,国内一般分配为16。
2、虚电路计数从1到8,缺省为1。
3、在改变了x.25各层的相关参数后,应重新启动x25(使用clear x25 {serial number | cmns-interface mac-address} [vc-number]或clear x25-vc命令),否则新设置的参数可能不能生效。同时应对照服务提供商对于x.25交换机端口的设置来配置路由器的相关参数,若出现参数不匹配则可能会导致连接失败或其它意外情况。
3. 实例:
3.1. 在以下实例中每二个路由器间均通过svc实现连接。
路由器设置如下:
Router1:
interface Serial0
encapsulation x25
ip address 192.200.10.1 255.255.255.0
x25 address 110101
x25 htc 16
x25 nvc 2
x25 map ip 192.200.10.2 110102 broadcast
x25 map ip 192.200.10.3 110103 broadcast
Router2:
interface Serial0
encapsulation x25
ip address 192.200.10.2 255.255.255.0
x25 address 110102
x25 htc 16
x25 nvc 2
x25 map ip 192.200.10.1 110101 broadcast
x25 map ip 192.200.10.3 110103 broadcast
Router:
interface Serial0
encapsulation x25
ip address 192.200.10.3 255.255.255.0
x25 address 110103
x25 htc 16
x25 nvc 2
x25 map ip 192.200.10.1 110101 broadcast
x25 map ip 192.200.10.2 110102 broadcast
相关调试命令:
clear x25-vc
show interfaces serial
show x25 map
show x25 route
show x25 vc
3.2. 在以下实例中路由器router1和router2均通过svc与router连接,但router1和router2不通过svc直接连接,此三个路由器的串口运行RIP路由协议,使用了子接口的概念。由于使用子接口,router1和router2均学习到了访问对方局域网的路径,若不使用子接口,router1和router2将学不到到对方局域网的路由。
子接口(Subinterface)是一个物理接口上的多个虚接口,可以用于在同一个物理接口上连接多个网。我们知道为了避免路由循环,路由器支持split horizon法则,它只允许路由更新被分配到路由器的其它接口,而不会再分配路由更新回到此路由被接收的接口。
无论如何,在广域网环境使用基于连接的接口(象 X.25和Frame Relay),同一接口通过虚电路(vc)连接多台远端路由器时,从同一接口来的路由更新信息不可以再被发回到相同的接口,除非强制使用分开的物理接口连接不同的路由器。Cisco提供子接口(subinterface)作为分开的接口对待。你可以将路由器逻辑地连接到相同物理接口的不同子接口, 这样来自不同子接口的路由更新就可以被分配到其他子接口,同时又满足split horizon法则。
Router1:
interface Serial0
encapsulation x25
ip address 192.200.10.1 255.255.255.0
x25 address 110101
x25 htc 16
x25 nvc 2
x25 map ip 192.200.10.3 110103 broadcast
router rip
network 192.200.10.0
Router2:
interface Serial0
encapsulation x25
ip address 192.200.11.2 255.255.255.0
x25 address 110102
x25 htc 16
x25 nvc 2
x25 map ip 192.200.11.3 110103 broadcast
router rip
network 192.200.11.0
Router:
interface Serial0
encapsulation x25
x25 address 110103
x25 htc 16
x25 nvc 2
interface Serial0.1 point-to-point
ip address 192.200.10.3 255.255.255.0
x25 map ip 192.200.10.1 110101 broadcast
interface Serial0.2 point-to-point
ip address 192.200.11.3 255.255.255.0
x25 map ip 192.200.11.2 110102 broadcast
router rip
network 192.200.10.0
network 192.200.11.0
帧中继是一种高性能的WAN协议,它运行在OSI参考模型的物理层和数据链路层。它是一种数据包交换技术,是X.25的简化版本。它省略了X.25的一些强健功能,如提供窗口技术和数据重发技术,而是依靠高层协议提供纠错功能,这是因为帧中继工作在更好的WAN设备上,这些设备较之X.25的WAN设备具有更可靠的连接服务和更高的可靠性,它严格地对应于OSI参考模型的最低二层,而X.25还提供第三层的服务,所以,帧中继比X.25具有更高的性能和更有效的传输效率。
帧中继广域网的设备分为数据终端设备(DTE)和数据电路终端设备(DCE),Cisco路由器作为 DTE设备。
帧中继技术提供面向连接的数据链路层的通信,在每对设备之间都存在一条定义好的通信链路,且该链路有一个链路识别码。这种服务通过帧中继虚电路实现,每个帧中继虚电路都以数据链路识别码(DLCI)标识自己。DLCI的值一般由帧中继服务提供商指定。帧中继即支持PVC也支持SVC。
帧中继本地管理接口(LMI)是对基本的帧中继标准的扩展。它是路由器和帧中继交换机之间信令标准,提供帧中继管理机制。它提供了许多管理复杂互联网络的特性,其中包括全局寻址、虚电路状态消息和多目发送等功能。
2. 有关命令:
任务 命令
设置Frame Relay封装 encapsulation frame-relay[ietf] 1
设置Frame Relay LMI类型 frame-relay lmi-type {ansi | cisco | q933a}2
设置子接口 interface interface-type interface-number.subinterface-number [multipoint|point-to-point]
映射协议地址与DLCI frame-relay map protocol protocol-address dlci [broadcast]3
设置FR DLCI编号 frame-relay interface-dlci dlci [broadcast]
注:1.若使Cisco路由器与其它厂家路由设备相连,则使用Internet工程任务组(IETF)规定的帧中继封装格式。
2.从Cisco IOS版本11.2开始,软件支持本地管理接口(LMI)“自动感觉”, “自动感觉”使接口能确定交换机支持的LMI类型,用户可以不明确配置LMI接口类型。
3.broadcast选项允许在帧中继网络上传输路由广播信息。
3. 帧中继point to point配置实例:
Router1:
interface serial 0
encapsulation frame-relay
interface serial 0.1 point-to-point
ip address 172.16.1.1 255.255.255.0
frame-reply interface-dlci 105
interface serial 0.2 point-to-point
ip address 172.16.2.1 255.255.255.0
frame-reply interface-dlci 102
interface serial 0.3 point-to-point
ip address 172.16.4.1 255.255.255.0
frame-reply interface-dlci 104
Router2:
interface serial 0
encapsulation frame-relay
interface serial 0.1 point-to-point
ip address 172.16.2.2 255.255.255.0
frame-reply interface-dlci 201
interface serial 0.2 point-to-point
ip address 172.16.3.1 255.255.255.0
frame-reply interface-dlci 203
相关调试命令:
show frame-relay lmi
show frame-relay map
show frame-relay pvc
show frame-relay route
show interfaces serial
go top
4. 帧中继 Multipoint 配置实例:
Router1:
interface serial 0
encapsulation frame-reply
interface serial 0.1 multipoint
ip address 172.16.1.2 255.255.255.0
frame-reply map ip 172.16.1.1 201 broadcast
frame-reply map ip 172.16.1.3 301 broadcast
frame-reply map ip 172.16.1.4 401 broadcast
Router2:
interface serial 0
encapsulation frame-reply
interface serial 0.1 multipoint
ip address 172.16.1.1 255.255.255.0
frame-reply map ip 172.16.1.2 102 broadcast
frame-reply map ip 172.16.1.3 102 broadcast
frame-reply map ip 172.16.1.4 102 broadcast
五、ISDN
1. 综合数字业务网(ISDN)
综合数字业务网(ISDN)由数字电话和数据传输服务两部分组成,一般由电话局提供这种服务。ISDN的基本速率接口(BRI)服务提供2个B信道和1个D信道(2B+D)。BRI的B信道速率为64Kbps,用于传输用户数据。D信道的速率为16Kbps,主要传输控制信号。在北美和日本,ISDN的主速率接口(PRI)提供23个B信道和1个D信道,总速率可达1.544Mbps,其中D信道速率为64Kbps。而在欧洲、澳大利亚等国家,ISDN的PRI提供30个B信道和1个64Kbps D信道,总速率可达2.048Mbps。我国电话局所提供ISDN PRI为30B+D。
2. 基本命令
任务 命令
设置ISDN交换类型 isdn switch-type switch-type1
接口设置 interface bri 0
设置PPP封装 encapsulation ppp
设置协议地址与电话号码的映射 dialer map protocol next-hop-address [name hostname] [broadcast] [dial-string]
启动PPP多连接 ppp multilink
设置启动另一个B通道的阈值 dialer load-threshold load
显示ISDN有关信息 show isdn {active | history | memory | services | status [dsl | interface-type number] | timers}
注:1.交换机类型如下表,国内交换机一般为basic-net3。
按区域分关键字 交换机类型
Australia
basic-ts013 Australian TS013 switches
Europe
basic-1tr6 German 1TR6 ISDN switches
basic-nwnet3 Norway NET3 switches (phase 1)
basic-net3 NET3 ISDN switches (UK, Denmark, and other nations); covers the Euro-ISDN E-DSS1 signalling system
primary-net5 NET5 switches (UK and Europe)
vn2 French VN2 ISDN switches
vn3 French VN3 ISDN switches
Japan
ntt Japanese NTT ISDN switches
primary-ntt Japanese ISDN PRI switches
North America
basic-5ess AT&T basic rate switches
basic-dms100 NT DMS-100 basic rate switches
basic-ni1 National ISDN-1 switches
primary-4ess AT&T 4ESS switch type for the U.S. (ISDN PRI only)
primary-5ess AT&T 5ESS switch type for the U.S. (ISDN PRI only)
primary-dms100 NT DMS-100 switch type for the U.S. (ISDN PRI only)
New Zealand
basic-nznet3 New Zealand Net3 switches
3. ISDN实现DDR(dial-on-demand routing)实例:
设置如下:
Router1:
hostname router1
user router2 password cisco
isdn switch-type basic-net3
interface bri 0
ip address 192.200.10.1 255.255.255.0
encapsulation ppp
dialer map ip 192.200.10.2 name router2 572
dialer load-threshold 80
ppp multilink
dialer-group 1
ppp authentication chap
dialer-list 1 protocol ip permit
Router2:
hostname router2
user router1 password cisco
isdn switch-type basic-net3
interface bri 0
ip address 192.200.10.2 255.255.255.0
encapsulation ppp
dialer map ip 192.200.10.1 name router1 571
dialer load-threshold 80
ppp multilink
dialer-group 1
ppp authentication chap
dialer-list 1 protocol ip permit
Cisco路由器同时支持回拨功能,我们将路由器Router1作为Callback Server,Router2作为Callback Client。
与回拨相关命令:
任务 命令
映射协议地址和电话号码,并在接口上使用在全局模式下定义的PPP回拨的映射类别。 dialer map protocol address name hostname class classname dial-string
设置接口支持PPP回拨 ppp callback accept
在全局模式下为PPP回拨设置映射类别 map-class dialer classname
通过查找注册在dialer map里的主机名来决定回拨. dialer callback-server [username]
设置接口要求PPP回拨 ppp callback request
设置如下:
Router1:
hostname router1
user router2 password cisco
isdn switch-type basic-net3
interface bri 0
ip address 192.200.10.1 255.255.255.0
encapsulation ppp
dialer map ip 192.200.10.2 name router2 class s3 572
dialer load-threshold 80
ppp callback accept
ppp multilink
dialer-group 1
ppp authentication chap
map-class dialer s3
dialer callback-server username
dialer-list 1 protocol ip permit
Router2:
hostname router2
user router1 password cisco
isdn switch-type basic-net3
interface bri 0
ip address 192.200.10.2 255.255.255.0
encapsulation ppp
dialer map ip 192.200.10.1 name router1 571
dialer load-threshold 80
ppp callback request
ppp multilink
dialer-group 1
ppp authentication chap
dialer-list 1 protocol ip permit
相关调试命令:
debug dialer
debug isdn event
debug isdn q921
debug isdn q931
debug ppp authentication
debug ppp error
debug ppp negotiation
debug ppp packet
show dialer
show isdn status
举例:执行debug dialer命令观察router2呼叫router1,router1回拨router2的过程.
router1#debug dialer
router2#ping 192.200.10.1
router1#
00:03:50: %LINK-3-UPDOWN: Interface BRI0:1, changed state to up
00:03:50: BRI0:1:PPP callback Callback server starting to router2 572
00:03:50: BRI0:1: disconnecting call
00:03:50: %LINK-3-UPDOWN: Interface BRI0:1, changed state to down
00:03:50: BRI0:1: disconnecting call
00:03:50: BRI0:1: disconnecting call
00:03:51: %LINK-3-UPDOWN: Interface BRI0:2, changed state to up
00:03:52: callback to router2 already started
00:03:52: BRI0:2: disconnecting call
00:03:52: %LINK-3-UPDOWN: Interface BRI0:2, changed state to down
00:03:52: BRI0:2: disconnecting call
00:03:52: BRI0:2: disconnecting call
00:04:05: : Callback timer expired
00:04:05: BRI0:beginning callback to router2 572
00:04:05: BRI0: Attempting to dial 572
00:04:05: Freeing callback to router2 572
00:04:05: %LINK-3-UPDOWN: Interface BRI0:1, changed state to up
00:04:05: BRI0:1: No callback negotiated
00:04:05: %LINK-3-UPDOWN: Interface Virtual-Access1, changed state to up
00:04:05: dialer Protocol up for Vi1
00:04:06: %LINEPROTO-5-UPDOWN: Line protocol on Interface BRI0:1, changed state
to up
00:04:06: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access1, chang
ed state to up
00:04:11: %ISDN-6-CONNECT: Interface BRI0:1 is now connected to 572
#router1
4. ISDN访问首都在线263网实例:
本地局部网地址为10.0.0.0/24,属于保留地址,通过NAT地址翻译功能,局域网用户可以通过ISDN上263网访问Internet。263的ISDN电话号码为2633,用户为263,口令为263,所涉及的命令如下表:
任务 命令
指定接口通过PPP/IPCP地址协商获得IP地址 ip address negotiated
指定内部和外部端口 ip nat {inside | outside}
使用ppp/pap作认证 ppp authentication pap callin
指定接口属于拨号组1 dialer-group 1
定义拨号组1允许所有IP协议 dialer-list 1 protocol ip permit
设定拨号,号码为2633 dialer string 2633
设定登录263的用户名和口令 ppp pap sent-username 263 password 263
设定
默认
路由 ip route 0.0.0.0 0.0.0.0 bri 0
设定符合访问列表2的所有源地址被翻译为bri 0所拥有的地址 ip nat inside source list 2 interface bri 0 overload
设定访问列表2,允许所有协议 access-list 2 permit any
具体配置如下:
hostname Cisco2503
isdn switch-type basic-net3
ip subnet-zero
no ip domain-lookup
ip routing
interface Ethernet 0
ip address 10.0.0.1 255.255.255.0
ip nat inside
no shutdown
interface Serial 0
shutdown
no description
no ip address
interface Serial 1
shutdown
no description
no ip address
interface bri 0
ip address negotiated
ip nat outside
encapsulation ppp
ppp authentication pap callin
ppp multilink
dialer-group 1
dialer hold-queue 10
dialer string 2633
dialer idle-timeout 120
ppp pap sent-username 263 password 263
no cdp enable
no ip split-horizon
no shutdown
ip classless
! Static Routes
ip route 0.0.0.0 0.0.0.0 bri 0
! Access Control List 2
access-list 2 permit any
dialer-list 1 protocol ip permit
! Dynamic NAT
ip nat inside source list 2 interface bri 0 overload
snmp-server community public ro
line console 0
exec-timeout 0 0
line vty 0 4
5. Cisco765M通过ISDN拨号上263
由于Cisco765的设置命令与我们
常用
的Cisco路由器的命令不同,所以以下列举了通过Cisco765上263访问Internet的具体命令行设置步骤。
>set system c765
c765> set multidestination on
c765> set switch net3
c765> set ppp multilink on
c765> cd lan
c765:LAN> set ip routing on
c765:LAN> set ip address 10.0.0.1
c765:LAN> set ip netmask 255.0.0.0
c765:LAN> set briding off
c765:LAN>cd
c765> set user remotenet
New user remotenet being created
c765:remotenet> set ip routing on
c765:remotenet> set bridging off
c765:remotenet> set ip framing none
c765:remotenet> set ppp clientname 263
c765:remotenet> set ppp password client
Enter new Password: 263
Re-Type new Password: 263
c765:remotenet> set ppp authentication out none
c765:remotenet> set ip address 0.0.0.0
c765:remotenet> set ip netmask 0.0.0.0
c765:remotenet> set ppp address negotiation local on
c765:remotenet> set ip pat on
c765:remotenet> set ip route destination 0.0.0.0/0 gateway 0.0.0.0
c765:remotenet> set number 2633
c765:remotenet> set active
命令描述如下:
任务 命令
设置路由器系统名称 set system c765
允许路由器呼叫多个目的地 set multidestination on
设置ISDN交换机类型为NET3 set switch net3
允许点到点间多条通道连接实现负载均衡 set ppp multilink on
关掉桥接 set briding off
建立用户预制文件用于设置拨号连接参数- 可以设置多个用户预制文件用于相同的物理端口对应于不同的连接。 set user remotenet
使用PPP/IPCP set ip framing none
设置上网用户帐号 set ppp clientname 263
设置上网口令 set ppp password client Enter new Password: 263 Re-Type new Password: 263
不用PPP/CHAP或PAP做认证 set ppp authentication out none
允许地址磋商 set ppp address negotiation local on
设置地址翻译 set ip pat on
设置
默认
路由 set ip route destination 0.0.0.0/0 gateway 0.0.0.0
设置ISP的电话号码 set number 2633
激活用户预制文件 set active
六、PSTN
电话网络(PSTN)是目前普及程度最高、成本最低的公用通讯网络,它在网络互连中也有广泛的应用。电话网络的应用一般可分为两种类型,一种是同等级别机构之间以按需拨号(DDR)的方式实现互连,一种是ISP为拨号上网为用户提供的远程访问服务的功能。
1. 远程访问
1.1.Access Server基本设置:
选用Cisco2511作为访问服务器,采用IP地址池动态分配地址.远程工作站使用WIN95拨号网络实现连接。
全局设置:
任务 命令
设置用户名和密码 username username password password
设置用户的IP地址池 ip local pool {default | pool-name low-ip-address [high-ip-address]}
指定地址池的工作方式 ip address-pool [dhcp-proxy-client | local]
基本接口设置命令:
任务 命令
设置封装形式为PPP encapsulation ppp
启动异步口的路由功能 async default routing
设置异步口的PPP工作方式 async mode {dedicated | interactive}
设置用户的IP地址 peer default ip address {ip-address | dhcp | pool [pool-name]}
设置IP地址与Ethernet0相同 ip unnumbered ethernet0
line拨号线设置:
任务 命令
设置modem的工作方式 modem {inout|dialin}
自动配置modem类型 modem autoconfig discovery
设置拨号线的通讯速率 speed speed
设置通讯线路的流控方式 flowcontrol {none | software [lock] [in | out] | hardware [in | out]}
连通后自动执行命令 autocommand command
访问服务器设置如下:
Router:
hostname Router
enable secret 5 $1$EFqU$tYLJLrynNUKzE4bx6fmH//
interface Ethernet0
ip address 10.111.4.20 255.255.255.0
interface Async1
ip unnumbered Ethernet0
encapsulation ppp
keepalive 10
async mode interactive
peer default ip address pool Cisco2511-Group-142
ip local pool Cisco2511-Group-142 10.111.4.21 10.111.4.36
line con 0
exec-timeout 0 0
password cisco
line 1 16
modem InOut
modem autoconfigure discovery
flowcontrol hardware
line aux 0
transport input all
line vty 0 4
password cisco
相关调试命令:
show interface
show line
1.2. Access Server通过Tacacs服务器实现安全认证:
使用一台WINDOWS NT服务器作为Tacacs服务器,地址为10.111.4.2,运行Cisco2511随机带的Easy ACS 1.0软件实现用户认证功能.
相关设置:
任务 命令
激活AAA访问控制 aaa new-model
用户登录时
默认
起用Tacacs+做AAA认证 aaa authentication login default tacacs+
列表名为no_tacacs使用ENABLE口令做认证 aaa authentication login no_tacacs enable
在运行PPP的串行线上采用Tacacs+做认证 aaa authentication ppp default tacacs+
由TACACS+服务器授权运行EXEC aaa authorization exec tacacs+
由TACACS+服务器授权与网络相关的服务请求。 aaa authorization network tacacs+
为EXEC会话运行记帐.进程开始和结束时发通告给TACACS+服务器。 aaa accounting exec start-stop tacacs+
为与网络相关的服务需求运行记帐包括SLIP,PPP,PPP NCPs,ARAP等.在进程开始和结束时发通告给TACACS+服务器。 aaa accounting network start-stop tacacs+
指定Tacacs服务器地址 tacacs-server host 10.111.4.2
在Tacacs+服务器和访问服务器设定共享的关键字,访问服务器和Tacacs+服务器使用这个关键字去加密口令和响应信息。这里使用tac作为关键字。 tacacs-server key tac
访问服务器设置如下:
hostname router
aaa new-model
aaa authentication login default tacacs+
aaa authentication login no_tacacs enable
aaa authentication ppp default tacacs+
aaa authorization exec tacacs+
aaa authorization network tacacs+
aaa accounting exec start-stop tacacs+
aaa accounting network start-stop tacacs+
enable secret 5 $1$kN4g$CvS4d2.rJzWntCnn/0hvE0
interface Ethernet0
ip address 10.111.4.20 255.255.255.0
interface Serial0
no ip address
shutdown
interface Serial1
no ip address
shutdown
interface Group-Async1
ip unnumbered Ethernet0
encapsulation ppp
async mode interactive
peer default ip address pool Cisco2511-Group-142
no cdp enable
group-range 1 16
ip local pool Cisco2511-Group-142 10.111.4.21 10.111.4.36
tacacs-server host 10.111.4.2
tacacs-server key tac
line con 0
exec-timeout 0 0
password cisco
login authentication no_tacacs
line 1 16
login authentication tacacs
modem InOut
modem autoconfigure type usr_courier
autocommand ppp
transport input all
stopbits 1
rxspeed 115200
txspeed 115200
flowcontrol hardware
line aux 0
transport input all
line vty 0 4
password cisco
2. DDR(dial-on-demand routing)实例
此例通过Cisco 2500系列路由器的aux端口实现异步拨号DDR连接。Router1拨号连接到Router2。其中采用PPP/CHAP做安全认证,在Router1中应建立一个用户,以对端路由器主机名作为用户名,即用户名应为Router2。同时在Router2中应建立一个用户,以对端路由器主机名作为用户名,即用户名应为Router1。所建的这两用户的password必须相同。
相关命令如下:
任务 命令
设置路由器与modem的接口指令 chat-script script-name EXPECT SEND EXPECT SEND (etc.)
设置端口在挂断前的等待时间 dialer idle-timeout seconds
设置协议地址与电话号码的映射 dialer map protocol next-hop-address [name hostname] [broadcast] [modem-script modem-regexp] [system-script system-regexp] [dial-string]
设置电话号码 dialer string dial-string
指定在特定线路下路由器
默认
使用的chat-script script {dialer|reset} script-name
Router1:
hostname Router1
enable secret 5 $1$QKI7$wXjpFqC74vDAyKBUMallw/
username Router2 password cisco
chat-script cisco-default "" "AT" TIMEOUT 30 OK "ATDT \T" TIMEOUT 30 CONNECT \c
interface Ethernet0
ip address 10.0.0.1 255.255.255.0
interface Async1
ip address 192.200.10.1 255.255.255.0
encapsulation ppp
async default routing
async mode dedicated
dialer in-band
dialer idle-timeout 60
dialer map ip 192.200.10.2 name Router2 modem-script cisco-default 573
dialer-group 1
ppp authentication chap
ip route 10.0.1.0 255.255.255.0 192.200.10.2
dialer-list 1 protocol ip permit
line con 0
line aux 0
modem InOut
modem autoconfigure discovery
flowcontrol hardware
Router2:
hostname Router2
enable secret 5 $1$F6EV$5U8puzNt2/o9g.t56PXHo.
username Router1 password cisco
interface Ethernet0
ip address 10.0.1.1 255.255.255.0
interface Async1
ip address 192.200.10.2 255.255.255.0
encapsulation ppp
async default routing
async mode dedicated
dialer in-band
dialer idle-timeout 60
dialer map ip 192.200.10.1 name Router1
dialer-group 1
ppp authentication chap
ip route 10.0.0.0 255.255.255.0 192.200.10.1
dialer-list 1 protocol ip permit
line con 0
line aux 0
modem InOut
modem autoconfigure discovery
flowcontrol hardware
相关调试命令:
debug dialer
debug ppp authentication
debug ppp error
debug ppp negotiation
debug ppp packet
show dialer
3. 异步拨号备份DDN专线:
此例主连接采用DDN专线,备份线路为电话拨号。当DDN专线连接正常时,主端口S0状态为up,line protocol亦为up,则备份线路状态为standby,line protocol为down,此时所有通信均通过主接口进行。当主接口连接发生故障时,端口状态为down,则激活备份接口,完成数据通信。此方法不适合为X.25做备份。因为,配置封装为X.25的接口只要和X.25交换机之间的连接正常其接口及line protocol的状态亦为 up,它并不考虑其它地方需与之通信的路由器的状态如何,所以若本地路由器状态正常,而对方路由器连接即使发生故障,本地也不会激活备份线路。例4将会描述如何为X.25做拨号备份。
以下是相关命令:
任务 命令
指定主线路改变后,次线路状态发生改变的延迟时间 backup delay {enable-delay | never} {disable-delay | never}
指定一个接口作为备份接口 backup interface type number
hostname c2522rb
enable secret 5 $1$J5vn$ceYDe2FwPhrZi6qsIIz6g0
enable password cisco
username c4700 password 0 cisco
ip subnet-zero
chat-script cisco-default "" "AT" TIMEOUT 30 OK "ATDT \T" TIMEOUT 30 CONNECT \c
chat-script reset atz
interface Ethernet0
ip address 16.122.51.254 255.255.255.0
no ip mroute-cache
interface Serial0
backup delay 10 10
backup interface Serial2
ip address 16.250.123.18 255.255.255.252
no ip mroute-cache
no fair-queue
interface Serial1
no ip address
no ip mroute-cache
shutdown
interface Serial2
physical-layer async
ip address 16.249.123.18 255.255.255.252
encapsulation ppp
async mode dedicated
dialer in-band
dialer idle-timeout 60
dialer map ip 16.249.123.17 name c4700 6825179
dialer-group 1
ppp authentication chap
interface Serial3
no ip address
shutdown
no cdp enable
interface Serial4
no ip address
shutdown
no cdp enable
interface Serial5
no ip address
no ip mroute-cache
shutdown
interface Serial6
no ip address
no ip mroute-cache
shutdown
interface Serial7
no ip address
no ip mroute-cache
shutdown
interface Serial8
no ip address
no ip mroute-cache
shutdown
interface Serial9
no ip address
no ip mroute-cache
shutdown
interface BRI0
no ip address
no ip mroute-cache
shutdown
router eigrp 200
network 16.0.0.0
ip classless
dialer-list 1 protocol ip permit
line con 0
line 2
script dialer cisco-default
script reset reset
modem InOut
modem autoconfigure discovery
rxspeed 38400
txspeed 38400
flowcontrol hardware
line aux 0
line vty 0 4
password cisco
login
c2522rb#
4. 异步拨号备份X.25:
设置X.25的拨号备份,首先X.25连接的端口必须运行动态路由协议,异步拨号口必须使用静态路由.本例选择EIGRP作为路由选择协议,将静态路由的Metric的值设置为200,由于EIGRP的
默认
Metric为90,所以当同时有两条路径通往同一网段时,其中Metric值小的路径生效,而当X.25连接出现问题时,路由器无法通过路由协议学习到路由表,则此时静态路由生效,访问通过拨号端口实现。当X.25连接恢复正常时,路由器又可以学习到路由表,则由于 Metric值的不同,静态路由自动被动态路由所代替,这样就实现了备份的功能。
路由器Router1配置如下:
hostname router1
enable secret 5 $1$UTvD$99YiY2XsRMxHudcYeHn.Y.
enable password cisco
username router2 password cisco
ip subnet-zero
chat-script cisco-default "" "AT" TIMEOUT 30 OK "ATDT \T" TIMEOUT 30 CONNECT \c
chat-script reset atz
interface Ethernet0
ip address 202.96.38.100 255.255.255.0
interface Serial0
ip address 202.96.0.1 255.255.255.0
encapsulation x25
x25 address 10112227
x25 htc 16
x25 map ip 202.96.0.2 10112225 broadcast
interface Serial1
no ip address
shutdown
interface Async 1
ip address 202.96.1.1 255.255.255.252
encapsulation ppp
dialer in-band
dialer idle-timeout 60
dialer map ip 202.96.1.2 name router2 modem-script cisco-default 2113470
dialer-group 1
ppp authentication chap
router eigrp 200
redistribute connected
network 202.96.0.0
ip route 202.96.37.0 255.255.255.0 202.96.1.2 200
dialer-list 1 protocol ip permit
line con 0
line aux 0
script dialer cisco-default
script reset reset
modem InOut
modem autoconfigure discovery
transport input all
rxspeed 38400
txspeed 38400
flowcontrol hardware
line vty 0 4
password cisco
login
路由器Router2配置如下:
hostname router2
enable secret 5 $1$T4IU$2cIqak8f/E4Ug6dLT0k.J0
enable password cisco
username router1 password cisco
ip subnet-zero
chat-script cisco-default "" "AT" TIMEOUT 30 OK "ATDT \T" TIMEOUT 30 CONNECT \c
chat-script reset atz
interface Ethernet0
ip address 202.96.37.100 255.255.255.0
interface Serial0
ip address 202.96.0.2 255.255.255.0
no ip mroute-cache
encapsulation x25
x25 address 10112225
x25 htc 16
x25 map ip 202.96.0.1 10112227 broadcast
interface Serial1
no ip address
shutdown
interface Async1
ip address 202.96.1.2 255.255.255.252
encapsulation ppp
keepalive 30
async default routing
async mode dedicated
dialer in-band
dialer idle-timeout 60
dialer wait-for-carrier-time 120
dialer map ip 202.96.1.1 name router1 modem-script cisco-default 2113469
dialer-group 1
ppp authentication chap
router eigrp 200
redistribute static
network 202.96.0.0
no ip classless
ip route 202.96.38.0 255.255.255.0 202.96.1.1 200
dialer-list 1 protocol ip permit
line con 0
exec-timeout 0 0
line aux 0
script reset reset
modem InOut
modem autoconfigure discovery
transport input all
rxspeed 38400
txspeed 38400
flowcontrol hardware
line vty 0 4
password cisco
login
路由协议:
一、RIP协议
RIP(Routing information Protocol)是应用较早、使用较普遍的内部网关协议(Interior Gateway Protocol,简称IGP),适用于小型同类网络,是典型的距离向量(distance-vector)协议。文档见RFC1058、RFC1723。
RIP通过广播UDP报文来交换路由信息,每30秒发送一次路由信息更新。RIP提供跳跃计数(hop count)作为尺度来衡量路由距离,跳跃计数是一个包到达目标所必须经过的路由器的数目。如果到相同目标有二个不等速或不同带宽的路由器,但跳跃计数相同,则RIP认为两个路由是等距离的。RIP最多支持的跳数为15,即在源和目的网间所要经过的最多路由器的数目为15,跳数16表示不可达。
1. 有关命令
任务 命令
指定使用RIP协议 router rip
指定RIP版本 version {1|2}1
指定与该路由器相连的网络 network network
注:1.Cisco的RIP版本2支持验证、密钥管理、路由汇总、无类域间路由(CIDR)和变长子网掩码(VLSMs)
2. 举例
Router1:
router rip
version 2
network 192.200.10.0
network 192.20.10.0
相关调试命令:
show ip protocol
show ip route
二、IGRP协议
IGRP (Interior Gateway Routing Protocol)是一种动态距离向量路由协议,它由Cisco公司八十年代中期设计。使用组合用户配置尺度,包括延迟、带宽、可靠性和负载。
缺省情况下,IGRP每90秒发送一次路由更新广播,在3个更新周期内(即270秒),没有从路由中的第一个路由器接收到更新,则宣布路由不可访问。在7个更新周期即630秒后,Cisco IOS 软件从路由表中清除路由。
1. 有关命令
任务 命令
指定使用RIP协议 router igrp autonomous-system1
指定与该路由器相连的网络 network network
指定与该路由器相邻的节点地址 neighbor ip-address
注:1、autonomous-system可以随意建立,并非实际意义上的autonomous-system,但运行IGRP的路由器要想交换路由更新信息其autonomous-system需相同。
Router1:
router igrp 200
network 192.200.10.0
network 192.20.10.0
三、OSPF协议
OSPF(Open Shortest Path First)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。与RIP相对,OSPF是链路状态路有协议,而RIP是距离向量路由协议。
链路是路由器接口的另一种说法,因此OSPF也称为接口状态路由协议。OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。
文档见RFC2178。
1.有关命令
任务 命令
指定使用OSPF协议 router ospf process-id1
指定与该路由器相连的网络 network address wildcard-mask area area-id2
指定与该路由器相邻的节点地址 neighbor ip-address
注:1、OSPF路由进程process-id必须指定范围在1-65535,多个OSPF进程可以在同一个路由器上配置,但最好不这样做。多个OSPF进程需要多个OSPF数据库的副本,必须运行多个最短路径算法的副本。process-id只在路由器内部起作用,不同路由器的process-id可以不同。
2、wildcard-mask 是子网掩码的反码, 网络区域ID area-id在0-4294967295内的十进制数,也可以是带有IP地址格式的x.x.x.x。当网络区域ID为0或0.0.0.0时为主干域。不同网络区域的路由器通过主干域学习路由信息。
2.基本配置举例:
Router1:
interface ethernet 0
ip address 192.1.0.129 255.255.255.192
interface serial 0
ip address 192.200.10.5 255.255.255.252
router ospf 100
network 192.200.10.4 0.0.0.3 area 0
network 192.1.0.128 0.0.0.63 area 1
Router2:
interface ethernet 0
ip address 192.1.0.65 255.255.255.192
interface serial 0
ip address 192.200.10.6 255.255.255.252
router ospf 200
network 192.200.10.4 0.0.0.3 area 0
network 192.1.0.64 0.0.0.63 area 2
Router3:
interface ethernet 0
ip address 192.1.0.130 255.255.255.192
router ospf 300
network 192.1.0.128 0.0.0.63 area 1
Router4:
interface ethernet 0
ip address 192.1.0.66 255.255.255.192
router ospf 400
network 192.1.0.64 0.0.0.63 area 1
相关调试命令:
debug ip ospf events
debug ip ospf packet
show ip ospf
show ip ospf database
show ip ospf interface
show ip ospf neighbor
show ip route
3. 使用身份验证
为了安全的原因,我们可以在相同OSPF区域的路由器上启用身份验证的功能,只有经过身份验证的同一区域的路由器才能互相通告路由信息。
在
默认
情况下OSPF不使用区域验证。通过两种方法可启用身份验证功能,纯文本身份验证和消息摘要(md5)身份验证。纯文本身份验证传送的身份验证口令为纯文本,它会被网络探测器确定,所以不安全,不建议使用。而消息摘要(md5)身份验证在传输身份验证口令前,要对口令进行加密,所以一般建议使用此种方法进行身份验证。
使用身份验证时,区域内所有的路由器接口必须使用相同的身份验证方法。为起用身份验证,必须在路由器接口配置模式下,为区域的每个路由器接口配置口令。
任务 命令
指定身份验证 area area-id authentication [message-digest]
使用纯文本身份验证 ip ospf authentication-key password
使用消息摘要(md5)身份验证 ip ospf message-digest-key keyid md5 key
以下列举两种验证设置的示例,示例的网络分布及地址分配环境与以上基本配置举例相同,只是在Router1和Router2的区域0上使用了身份验证的功能。:
例1.使用纯文本身份验证
Router1:
interface ethernet 0
ip address 192.1.0.129 255.255.255.192
interface serial 0
ip address 192.200.10.5 255.255.255.252
ip ospf authentication-key cisco
router ospf 100
network 192.200.10.4 0.0.0.3 area 0
network 192.1.0.128 0.0.0.63 area 1
area 0 authentication
Router2:
interface ethernet 0
ip address 192.1.0.65 255.255.255.192
interface serial 0
ip address 192.200.10.6 255.255.255.252
ip ospf authentication-key cisco
router ospf 200
network 192.200.10.4 0.0.0.3 area 0
network 192.1.0.64 0.0.0.63 area 2
area 0 authentication
例2.消息摘要(md5)身份验证:
Router1:
interface ethernet 0
ip address 192.1.0.129 255.255.255.192
interface serial 0
ip address 192.200.10.5 255.255.255.252
ip ospf message-digest-key 1 md5 cisco
router ospf 100
network 192.200.10.4 0.0.0.3 area 0
network 192.1.0.128 0.0.0.63 area 1
area 0 authentication message-digest
Router2:
interface ethernet 0
ip address 192.1.0.65 255.255.255.192
interface serial 0
ip address 192.200.10.6 255.255.255.252
ip ospf message-digest-key 1 md5 cisco
router ospf 200
network 192.200.10.4 0.0.0.3 area 0
network 192.1.0.64 0.0.0.63 area 2
area 0 authentication message-digest
相关调试命令:
debug ip ospf adj
debug ip ospf events
四、重新分配路由
在实际工作中,我们会遇到使用多个IP路由协议的网络。为了使整个网络正常地工作,必须在多个路由协议之间进行成功的路由再分配。
以下列举了OSPF与RIP之间重新分配路由的设置范例:
Router1的Serial 0端口和Router2的Serial 0端口运行OSPF,在Router1的Ethernet 0端口运行RIP 2,Router3运行RIP2,Router2有指向Router4的192.168.2.0/24网的静态路由,Router4使用
默认
静态路由。需要在Router1和Router3之间重新分配OSPF和RIP路由,在Router2上重新分配静态路由和直连的路由。
范例所涉及的命令
任务 命令
重新分配直连的路由 redistribute connected
重新分配静态路由 redistribute static
重新分配ospf路由 redistribute ospf process-id metric metric-value
重新分配rip路由 redistribute rip metric metric-value
Router1:
interface ethernet 0
ip address 192.168.1.1 255.255.255.0
interface serial 0
ip address 192.200.10.5 255.255.255.252
router ospf 100
redistribute rip metric 10
network 192.200.10.4 0.0.0.3 area 0
router rip
version 2
redistribute ospf 100 metric 1
network 192.168.1.0
Router2:
interface loopback 1
ip address 192.168.3.2 255.255.255.0
interface ethernet 0
ip address 192.168.0.2 255.255.255.0
interface serial 0
ip address 192.200.10.6 255.255.255.252
router ospf 200
redistribute connected subnet
redistribute static subnet
network 192.200.10.4 0.0.0.3 area 0
ip route 192.168.2.0 255.255.255.0 192.168.0.1
Router3:
interface ethernet 0
ip address 192.168.1.2 255.255.255.0
router rip
version 2
network 192.168.1.0
Router4:
interface ethernet 0
ip address 192.168.0.1 255.255.255.0
interface ethernet 1
ip address 192.168.2.1 255.255.255.0
ip route 0.0.0.0 0.0.0.0 192.168.0.2
五、IPX协议设置
IPX协议与IP协议是两种不同的网络层协议,它们的路由协议也不一样,IPX的路由协议不象IP的路由协议那样丰富,所以设置起来比较简单。但IPX协议在以太网上运行时必须指定封装形式。
1. 有关命令
启动IPX路由 ipx routing
设置IPX网络及以太网封装形式 ipx network network [encapsulation encapsulation-type]1
指定路由协议,
默认
为RIP ipx router {eigrp autonomous-system-number | nlsp [tag] | rip}
注:1.network 范围是1 到FFFFFFFD.
IPX封装类型列表
接口类型 封装类型 IPX帧类型
Ethernet novell-ether (
默认
) arpa sap snap Ethernet_802.3 Ethernet_II Ethernet_802.2 Ethernet_Snap
Token Ring sap (
默认
) snap Token-Ring Token-Ring_Snap
FDDI snap (
默认
) sap novell-fddi Fddi_Snap Fddi_802.2 Fddi_Raw
在此例中,WAN的IPX网络为3a00,Router1所连接的局域网IPX网络号为2a00,在此局域网有一台Novell服务器,IPX网络号也是2a00, 路由器接口的IPX网络号必须与在同一网络的Novell服务器上设置的IPX网络号相同。路由器通过监听SAP来建立已知的服务及自己的网络地址表,并每60秒发送一次自己的SAP表。
Router1:
ipx routing
interface ethernet 0
ipx network 2a00 encapsulation sap
interface serial 0
ipx network 3a00
ipx router eigrp 10
network 3a00
network 2a00
Router2:
ipx routing
interface ethernet 0
ipx network 2b00 encapsulation sap
interface serial 0
ipx network 3a00
ipx router eigrp 10
network 2b00
network 3a00
相关调试命令:
debug ipx packet
debug ipx routing
debug ipx sap
debug ipx spoof
debug ipx spx
show ipx eigrp interfaces
show ipx eigrp neighbors
show ipx eigrp topology
show ipx interface
show ipx route
show ipx servers
show ipx spx-spoof
五、IPX协议设置
IPX协议与IP协议是两种不同的网络层协议,它们的路由协议也不一样,IPX的路由协议不象IP的路由协议那样丰富,所以设置起来比较简单。但IPX协议在以太网上运行时必须指定封装形式。
1. 有关命令
启动IPX路由 ipx routing
设置IPX网络及以太网封装形式 ipx network network [encapsulation encapsulation-type]1
指定路由协议,
默认
为RIP ipx router {eigrp autonomous-system-number | nlsp [tag] | rip}
注:1.network 范围是1 到FFFFFFFD.
IPX封装类型列表
接口类型 封装类型 IPX帧类型
Ethernet novell-ether (
默认
) arpa sap snap Ethernet_802.3 Ethernet_II Ethernet_802.2 Ethernet_Snap
Token Ring sap (
默认
) snap Token-Ring Token-Ring_Snap
FDDI snap (
默认
) sap novell-fddi Fddi_Snap Fddi_802.2 Fddi_Raw
在此例中,WAN的IPX网络为3a00,Router1所连接的局域网IPX网络号为2a00,在此局域网有一台Novell服务器,IPX网络号也是2a00, 路由器接口的IPX网络号必须与在同一网络的Novell服务器上设置的IPX网络号相同。路由器通过监听SAP来建立已知的服务及自己的网络地址表,并每60秒发送一次自己的SAP表。
Router1:
ipx routing
interface ethernet 0
ipx network 2a00 encapsulation sap
interface serial 0
ipx network 3a00
ipx router eigrp 10
network 3a00
network 2a00
Router2:
ipx routing
interface ethernet 0
ipx network 2b00 encapsulation sap
interface ser
数据库(dataBase,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。
数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。
数据库管理系统软件
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。
它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。
大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
数据库管理系统是数据库系统的核心,是管理数据库的软件。
数据库管理系统就是实现把用户意义下抽象的逻辑数据处理,转换成为计算机中具体的物理数据处理的软件。
有了数据库管理系统,用户就可以在抽象意义下处理数据,而不必顾及这些数据在计算机中的布局和物理位置。
常见的数据库管理软件:甲骨文的oracle,IBM的db2,sql server, Access,MySQL(开源,免费,跨平台).
数据库系统
数据库系统DBS(Data Base System,简称DBS)通常由软件、数据库和数据管理员组成。
软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。
数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。
数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。
MySQL
MySQL的管理
--linux:
yum -y install mariadb mariadb-server
yum -y install mysql mysql-server
--windows:
http://dev.mysql.com/downloads/mysql/
service mysqld start --开启
chkconfig mysqld on --设置开机自启
systemctl start mariadb
systemctl enable mariadb
ps aux |grep mysqld --查看进程
netstat -an |grep 3306 --查看端口
--设置密码
mysqladmin -uroot password '123' --设置初始密码,初始密码为空因此-p选项没有用
mysqladmin -u root -p123 password '1234' --修改root用户密码
mysql --本地登录,
默认
用户root,空密码,用户为root@127.0.0.1
mysql -u root -p 1234 --本地登录,指定用户名和密码,用户为root@127.0.0.1
mysql -u root -p 1234 -h 192.168.31.95 --远程登录,用户为root@192.168.31.95
--MYSQL的
常用
命令
--启动mysql服务与停止mysql服务命令:
net start mysql
net stop mysql
--登陆与退出命令:
mysql -h 服务器IP -P
端口号
-u 用户名 -p 密码
--mysql -h 127.0.0.1 -P 3306 -u root -p 123
--配置文件
/* my.ini文件:[mysql] default-character-set=gbk
[mysqld] character-set-server=gbk */
? (\?) 显示帮助信息
clear (\c) 明确当前输入语句
connect (\r) 连接到服务器,可选参数为数据库和主机
delimiter (\d) 设置语句分隔符
ego (\G) 发送命令到MySQL服务器,并显示结果
exit (\q) 退出MySQL等同于quit
go (\g) 发送命令到MySQL服务器
help (\h) 显示帮助信息
notee (\t) 不写输出文件
print (\p) 打印当前命令
prompt (\R) 改变MySQL提示信息
quit (\q) 退出MySQL
rehash (\#) 重新完成散列
source (\.) 执行一个SQL脚本文件,以一个文件名作为参数。
status (\s) 以服务器获取MySQL的状态
tee (\T) 设置输出文件,并将信息添加到所有给定的输出文件
use (\u) 用另一个数据库,数据库名称作为参数
charset (\C) 切换到另一个字符集
warnings (\W) 每一个语句之后显示警告
nowarning (\w) 每一个语句之后不显示警告
SQL及其规范
SQL(Structured Query Language结构化查询语言)是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询数据、更新数据等。
SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。
在使用它时,只需要发出"做什么"的命令,"怎么做"是不用使用者考虑的。
SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
<1> 在数据库系统中,SQL语句不区分大小写。但字符串常量区分大小写。建议命令大写,表名库名小写;
<2> SQL语句可单行或多行书写,以";"结尾。关键词不能跨多行或简写。
<3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。
SELECT * FROM tb_table
WHERE NAME="YUAN";
<4> 注释:单行注释:--
多行注释:/*......*/
<5>SQL语句可以折行操作
<6>SQL语言由DDL,DML,DQL和DCL组成
(1)数据库定义语言(Data Definition Language,DDL)
数据库定义语言主要用于定义数据库、表等,其中包括CREATE语句、ALTER语句和DROP语句。
CREATE语句用于创建数据库、数据表等,ALTER语句用于修改表的定义等,DROP语句用于删除数据库、删除表等。
(2)数据库操作语言(Data Mabipulation Language,DML)
数据库操作语言主要用于数据库进行添加、修改、删除操作,其中包括INSERT语句、UPDATE语言和DELETE语句。
INSERT语句用于插入数据,UPDATE语句用于修改数据,DELETE语句用于删除数据。
(3)数据库查询语言(Data Query Language,DQL)
数据库查询语言主要用于查询语言,也就是指SELECT语句。
SELECT语句查询数据库中的一条或多条数据。
(4)数据库控制语言(Data Control Language,DCL)
数据库控制语言主要用于控制用户的访问权限,其中包括GRANT语句、REVOKE语句、COMMIT语句和ROLLBACK语句。
GRANT语句用于给用户增加权限,REVOKE语句用于收回用户的权限,COMMIT语句用于提交事务,ROLLBACK语句用于回滚事务。
----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance Alliance Alliance Alliance
什么是开放手机联盟?
开放手机联盟, Open Handset Alliance :是美国 Google 公司与 2007 年 11 月 5 日宣布组建的一个全球性的联
盟组织。这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开
放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数
量已经达到了 43 家。
移动手机联盟创始成员:
Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay 、 Esmertec 、谷歌、宏达电、英特尔、 KDDI 、
Living Image 、 LG 、 Marvell 、摩托罗拉、 NMS 、 NTT DoCoMo 、 Nuance 、 Nvidia 、 PacketVideo 、高通、三星 、
SiRF 、 SkyPop 、 Sonic Network 、 Sprint Nextel 、 Synaptics 、 TAT 、意大利电信、西班牙电信、德州仪器、 T-M obile
和 Wind River 。
Mobile Mobile Mobile Mobile Operators Operators Operators Operators 移动运营商类
China Mobile Communications Corporation 中国移动通信
KDDI CORPORATION 日本 KDDI 电信
NTT DoCoMo, Inc. 日本多科莫电信
SOFTBANK MOBILE Corp. 日本软银移动
Sprint Nextel( 美国 )
T-Mobile( 德国 )
Telecom Italia( 意大利 )
Telef ó nica( 西班牙 )
Vodafone 沃达丰电信
China Unicom 中国联通
Semiconductor Semiconductor Semiconductor Semiconductor Companies Companies Companies Companies 半导体制造公司
AKM Semiconductor Inc
Audience
Atheros Communications
Broadcom Corporation( 博通 )
Ericsson ( 爱立信公司 )
Intel Corporation ( 英特尔公司 )
Marvell Semiconductor, Inc. ( 收购了 intel 手机芯片部门的公司 )----------------------------------- Android 编程基础
NVIDIA Corporation ( 英伟达公司 )
Qualcomm Inc.( 高通公司 )
SiRF Technology Holdings, Inc.( 知名 GPS 芯片制造商 )
Synaptics, Inc.
Texas Instruments Incorporated ( 德州仪器 )
Handset Handset Handset Handset Manufacturers Manufacturers Manufacturers Manufacturers 电话制造商
ASUSTeK Computer Inc. 华硕
Garmin International, Inc.
HTC Corporation ( 多普达的母公司 ) 宏达电子
Huawei Technologies 华为科技
LG Electronics, Inc. 乐金电子
Motorola, Inc. 摩托罗拉
Samsung Electronics 三星电子
Sony Ericsson 索尼爱立信
Toshiba Corporation 东芝公司
lenovo 联想移动
联盟成员: Software Software Software Software Companies Companies Companies Companies 软件提供公司
Ascender Corp.
eBay Inc.
Esmertec
Google Inc.
LivingImage LTD.
Nuance Communications, Inc.
OMRON SOFTWARE Co, Ltd. 日本欧姆龙软件
PacketVideo (PV)
SkyPop
SONiVOX
ASUSTeK Computer Inc. 华硕
AKM Semiconductor AKM 半导体公司
ARM 公司
Atheros Communications
Toshiba Corporation 东芝公司
lenovo 联想移动
软银移动 日本无线运营商软银
瑞典计算机咨询公司 Teleca AB
Garmin International, Inc. 高明
HTC Corporation ( 多普达的母公司 ) 宏达电子
Huawei Technologies 华为科技
LG Electronics, Inc. 乐金电子
Motorola, Inc. 摩托罗拉
Samsung Electronics 三星电子
Sony Ericsson 索尼爱立信
Teleca
Borqs 播思通讯
将会支持 Google 可能发布的手机操作系统或者应用软件,共同开发名为 Android 的开放源代码的移动 系
谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了
行业的进入门槛,移动互联网的发展远没有拥有统一标准的传统互联网发展迅速,此次推出的开源手机操 作
系统平台就是出于这个目的。
也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移
动互联网。----------------------------------- Android 编程基础
Android Android Android Android 手机新概念
操作系统的选择 -------- 定制和长尾
� MVC 和 Web APP 架构
Android Android Android Android 开发背景
� 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。
� 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发 既
有用又有吸引力的移动服务,并推广这些产品。 Android 进一步推进了 " 随时随地为每个人提供信息 " 这一企 业
目标的实现。
� Open Handset Alliance 汇集了多家业界巨头。运营商如: China Mobile 、 NTT DoCoMo 、 Vodafone 、 T-M obile
等;设备制造商如 ASUS 、 HTC 、 Huawei 、 LG 、 Motorola 、 Samsung 、 Sony Ericsson 、 Toshiba 等;芯片厂商
如 ARM 、 Broadcom 、 Intel 、 Marvell 、 NVIDIA 、 Qualcomm 等。软件厂商如 Ascender 、 eBay 、 Esmertec 、 Li vingImage
� Android 更像一款桌面环境为 Java 的 Linux 操作系统。有助于 Google 实现其 " 随时随地为每个人提供信
息 " 的企业战略。
HTC HTC HTC HTC Dream/G1 Dream/G1 Dream/G1 Dream/G1 具体配置
3.17 英寸 HVGA (480 x 320) ; 1150mAh 电池 ;高通 528Mhz 7201 处理器 ; 64MB RAM 、 128MB ROM ; 1GB
MicroSD 卡 ; QWERTY 全键盘; 310 万像素摄像头。
支持视频格式: H.264 、流媒体、 3GPP 、 MPEG4 和 Codec 3GP ;支持音频格式: MP3 、 AAC 、 AAC+ 、 W MA 、
MPEG4 、 WAV 、 MIDI 、 REAL 、 AUDIO 和 OGG ;支持墙纸格式: JPG 、 BMP 、 PNG 和 GIF ;铃声 (MP3 、
AAC 、 AAC+ 和 WMA) 。
蓝牙 (class 1) ;四频 (850 , 900 , 1800 , 1900) ;支持 3G , 802.11b 和 802.11g 。----------------------------------- Android 编程基础
支持 HTTP 、 WAP Push 和 xHTML ;支持 POP 、 IMAP 、 SMTP ,以及 AOL 和 GMAIL 电子邮件服务;支持 AIM 、
MSN 、雅虎通和 GTALK ;与谷歌日历同步;与 Android Market 联机;支持谷歌 “ 街景 ” 服务;包装盒内附
数据工具包。
https://sites.google.com/a/android.com/opensource/release-features
Android Android Android Android 盈利模式
Android 的 App Market 模式,软件开发者获得 7 成收入, 3 成用于系统维护。难点在于位置营销。
设备商通过卖设备、内置特色应用来获得盈利。也可以兼职专业软件开发者进行赢利。
Google 自身通过基于统一平台为用户提供信息来盈利。
Android Android Android Android 的优势
� 源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发 出
更具差异性的应用。
� 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。
� 运营商(中国移动等)的大力支持,产业链条的热捧。
� 良好的盈利模式( 3/7 开),产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利 益 。
将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情。
� Android 的源代码遵循 Apache V2 软件许可,而不是通常的 GPL v2 许可。有利于商业开发。
� 具有强大的 Linux 社区的支持。
Android Android Android Android 的不足
� 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开
源的移动计算平台,相信第三方应用会很快的丰富起来。
� Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造
成J ava 阵营的进一步分裂。
� 现有应用完善度不太够,需要的开发工作量较大。----------------------------------- Android 编程基础
� 基于 QEMU 开发的模拟器调试手段不十分丰富,只支持通话、SMS等,速度慢。
� 暂不具备 Push Mail 和 Office(DataViz 、 QuickOffice 计划近期推出 ) 功能,目前主要面向的是普通消费 者
用户,对商业用户支持尚弱。
Android Android Android Android 带来的影响
ANDROID 的推出后可能影响的产业包括移动电信业,软件开发业,手机制造业,在以消费者为核心的状 态 。
对消费者的影响
� 高档手机选择面增加。
� A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从计算机为主改成从手机使用为导向。新
生应用如:G oogle 地图及其衍生应用、 GMail 、 GTalk 等。
� GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。
� Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的
程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自
己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。
对手机制造者的影响
� Android 是款开源的移动计算软件平台,组建了 google 主导的拥有众多产业界巨头的产业联盟,有利于
高效开发、降低成本。
� 由于是源代码开放的产品,对非主导厂商而言,可以避开与主导厂商在核心技术上面的差距,开发出 更
具竞争力和差异化的产品。
对运营商的影响
� 丰富的数据业务,将导致数据流量的显著增加 。
� 手机来源增加,价格更为低廉。
对软件开发者的影响
� 因为 Android 移动软件平台抱持开放互通的观念,势必吸引不少自由软件的拥护者。
� 开发方向有三个重点 :----------------------------------- Android 编程基础
� 应用软件的开发
� 特殊功能的原生链接库
� 专属应用程序框架
� 由于 Android 的A pp Market 性质,可能催生出专门的应用软件开发商。
Android Android Android Android 应用现状
� 设备商: lenovo 、琦基、戴尔、三星、摩托罗拉、华为、英特尔、 Kogan 、索爱、华硕、多普达、爱可 视 、
Archos 等。
� 制造商: HTC 、 Telstra 等。
� 手机设计公司:播思、德信无线等。
� 运营商:中国移动、 Sprint 、 T-Mobile 、 Teleca AB 等。
� 芯片商: Qualcomm 、 Marvell 、 TI 、 Boardcom 等。----------------------------------- Android 编程基础
Android Android Android Android 开发入门
System System System System Requirements Requirements Requirements Requirements
The sections below describe the system and software requirements for developing Android applications using the
Android SDK tools included in Android 1.1 SDK, Release 1.
Supported Supported Supported Supported Operating Operating Operating Operating Systems Systems Systems Systems
• Windows XP (32-bit) or Vista (32- or 64-bit)
• Mac OS X 10.4.8 or later (x86 only)
• Linux (tested on Linux Ubuntu Dapper Drake)
Supported Supported Supported Supported Development Development Development Development Environments Environments Environments Environments
Eclipse IDE
o Eclipse 3.3 (Europa), 3.4 (Ganymede)
� Eclipse JDT plugin (included in most Eclipse IDE packages)
� WST (optional, but needed for the Android Editors feature; included in most Eclipse IDE
packages )
o JDK 5 or JDK 6 (JRE alone is not sufficient)
o Android Development Tools plugin (optional)
o Not Not Not Not compatible with Gnu Compiler for Java (gcj)
Other development environments or IDEs
o JDK 5 or JDK 6 (JRE alone is not sufficient)
o Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows
o Not Not Not Not compatible with Gnu Compiler for Java (gcj)
Note: Note: Note: Note: If JDK is already installed on your development computer, please take a moment to make sure that it meets the
version requirements listed above. In particular, note that some Linux distributions may include JDK 1.4 or Gnu
Compiler for Java, both of which are not supported for Android development----------------------------------- Android 编程基础
什么是 Android? Android? Android? Android?
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。
• 应用程序框架 支持组件的重用与替换
• Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化
• 集成的浏览器 基于开源的 WebKit 引擎
• 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 (硬件加速可选)
• SQLite SQLite SQLite SQLite 用作结构化的数据存储
• 多媒体支持 包括常见的音频、视频和静态图像格式 ( 如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG ,
GIF )
• GSM GSM GSM GSM 电话技术 (依赖于硬件)
• 蓝牙 Bluetooth, Bluetooth, Bluetooth, Bluetooth, EDGE, EDGE, EDGE, EDGE, 3G, 3G, 3G, 3G, 和 WiFi WiFi WiFi WiFi (依赖于硬件)
• 照相机, GPS GPS GPS GPS ,指南针,和加速度计( accelerometer accelerometer accelerometer accelerometer ) (依赖于硬件)
• 丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和 Eclipse 集成开发环境插件
Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email 客户端, SMS 短消息程序,日历,
地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语言编写的。
应用程序框架
开发人员也可以完全访问核心应用程序所使用的 API 框架。该应用程序的架构设计简化了组件的重用;任 何
一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循 框
架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。
隐藏在每个应用后面的是一系列的服务和系统 , 其中包括;
• 丰富而又可扩展的视图( Views ),可以用来构建应用程序, 它包括列表( lists ),网格( grids ),文
本框( text boxes ),按钮( buttons ), 甚至可嵌入的 web 浏览器。
• 内容提供器( Content Providers )使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或
者共享它们自己的数据
• 资源管理器( Resource Manager )提供 非代码资源的访问,如本地字符串,图形,和布局文件( la yout
files )。
• 通知管理器 ( Notification Manager ) 使得应用程序可以在状态栏中显示自定义的提示信息。
• 活动管理器( Activity Manager ) 用来管理应用程序生命周期并提供
常用
的导航回退功能。----------------------------------- Android 编程基础
Android 包含一些 C/C++ 库,这些库能被 Android 系统中不同的组件使用。它们通过 Android 应用程序框架
为开发者提供服务。以下是一些核心库:
• 系统 C C C C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linu x
的设备定制的。
• 媒体库 - 基于 PacketVideo OpenCORE ;该库支持多种
常用
的音频、视频格式回放和录制,同时支 持
静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
• Surface Surface Surface Surface Manager Manager Manager Manager - 对显示子系统的管理,并且为多个应用程序提 供了 2D 和 3D 图层的无缝融合。
• LibWebCore LibWebCore LibWebCore LibWebCore - 一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图。
• SGL SGL SGL SGL - 底层的 2D 图形引擎
• 3D 3D 3D 3D libraries libraries libraries libraries - 基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或者使用高
度优化的 3D 软加速。
• FreeType FreeType FreeType FreeType - 位图( bitmap )和矢量( vector )字体显示。
• SQLite SQLite SQLite SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
Android Android Android Android 运行库
Android 包括了一个核心库,该核心库提供了 JAVA 编程语言核心库的大多数功能。
每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟 机实例。 Dalvik 被设计
成一个设备可以同时高效地运行多个虚拟系统。 Dalvik 虚拟机执行( .dex )的 Dalvik 可执行文件,该格式 文
件针对小内存使用做了 优化。同时虚拟机是基于寄存器的,所有的类都经由 JAVA 编译器编译,然后通过 SDK
中 的 "dx" 工具转化成 .dex 格式由虚拟机执行。
Dalvik 虚拟机依赖于 linux 内核的一些功能,比如线程机制和底层内存管理机制。
Linux Linux Linux Linux 内核
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模 型 。
Linux 内核也同时作为硬件和软件栈之间的抽象层。----------------------------------- Android 编程基础
Android Android Android Android 的系统架构
Android Android Android Android 内核
� Linux 内核版本 2.6
� 位于硬件和软件堆之间的抽象层
� 核心服务:安全机制、内存管理、进程管理、网络、硬件驱动。
Android 依赖 Linux 内核 2.6 提供核心服务,比如安全、内存管理、进程管理、网络、硬件驱动。在这里, L inux
内核扮演的是硬件层和系统其它层次之间的一个抽象层的概念。这个操作系统并非类 GNU/Linux 的,因为 其
系统库,系统初始化和编程接口都和标准的 Linux 系统是有所不同的。----------------------------------- Android 编程基础
从 Google 目前 release 的 Linux 系统来看,其没有虚拟内存文件系统,系统所用的是 yaffs2 文件系统,具体
的映像也都位于 SDK 安装目录下。通过 emulator -console 命令,我们可以在 host 中断下得到一个简单的可 以
控制 Android 的 shell ,这 个 系 统 包 含 了 一 个 Toolbox ,提 供 一 些 基 本 的 命 令 工 具 , 集 中 在
/sbin,/system/sbin,/system/bin 中,但是很简陋,命令种类也很少。
目前 Android 的程序安装模式是靠 Eclipse 自动进行的,通过对底层的分析可知,大致步骤就是在 /data/app 和
data/data 下存放 android 底层和普通内核没有什么大的区别,我们可以将其作为一个 Linux 来进行开发和
hacking 。
Lib Lib Lib Lib 和运行环境
� C/C++ 库:被各种 Android 组件使用
� 通过应用程序框架开发者可以使用其功能
� 包括:
� 媒体库: MPEG4 H.264 MP3 JPG PNG .....
� WebKit/LibWebCore : Web 浏览引擎
� SQLite 关系数据库引擎
� 2D , 3D 图形库、引擎
丰富的类库支持: 2D 和 3D 图像库 OpenGL ES 、数据库 SQLite 、对象数据库 db4o 类库、媒体库、基于 Lin ux
底层系统 C 库等等,让应用开发更简单多样。 Google 使用 Apache 的 Harmony 类库, Harmony 某些方面速 度
快于 Sun 的 VM 。 Runtime 在 Dalvik Java VM 上, Dalvik 采用简练、高效的 byte code 格式运行,它能够在 低
资耗和没有应用相互干扰的情况下并行执行多个应用。
运行时环境
� 核心库提供的 Java 功能
� Dalvik 虚拟机依赖于 Linux 内核,例如线程或底层内存管理
� 设备可以运行多个 Dalvik 虚拟机,每一个 Android 应用程序在它自己的 Dalvik VM 实例中运行
� VM 执行优化的 Dalvik 可执行文件 (.dex)
� Dx- 工具把编译过的 Java 文件转换为 dex 文件----------------------------------- Android 编程基础
应用和框架
� 核心应用,例如联系人,电子邮件,电话,浏览器,日历,地图, ...
� 充分访问所有核心应用框架 API
� 简化组件的重用
� 用 Java 编写应用程序----------------------------------- Android 编程基础
支持的功能
+ Application framework: 可重用的和可替换的组件部分,在这个层面上,所有的软件都是平等的。
+ Dalvik virtul machine: 一个基于 Linux 的虚拟机。
+ Integrated browser: 一个基于开源的 WebKit 引擎的浏览器,在应用程序层。
+ Optimized graphics: 包含一个自定义的 2D 图形库和基于 OpenGL ES 1.0 标准的 3D 实现。
+ SQLite: 数据库
+ Media support: 通用的音频,视频和对各种图片格式的支持 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GI F)
+ GSM Telephony: GSM 移动网络 , 硬件支持。
+ Bluetooth, EDGE, 3G, and WiFi: 都依赖于硬件支持。
+ Camera, GPS, compass, and accelerometer: 都依赖于硬件支持。
+ Rich development environment: 包含一套完整的开发工具集,方便跟踪调试,内存检测和性能测试,而且
Eclipse 的插件。最底层的是一个 Linux Kernel ,加载了几个移动设备必要的系统驱动(这么说来 Android 基
础系统是要以 GPL 发布了?不知道 34 家厂商的硬件开发商们是怎么样想的);上面是类库和 Runtime ,绿 色
的类库部分可以看到大名鼎鼎的 SQLite ,这个软件甚至声称自己属于公共领域(比 MIT License 还要强 @ @ ) ,
字体 FreeType 是 BSD-style License 的,图形库 OpenGL ES 只需通过产品测试,无偿使用于产品。再向上看
是应用层的东西了,这里可以做的事情就非常多了 ,各个社区,各个厂家都可以参与进来。难怪 Android 的 sdk
可以 Apache License 发布了 , 对企业和开发人员友好啊。 那么 Google 自己的东西在哪里呢?没错,就是 右
边那个 runtime ,最吸引技术人员的就是这个 runtime (注意,这个才是 Android 的核心)。 Google 为它准备 了
一个虚拟机,叫做 Dalvik 。这个让人摸不着头脑的东西的到底是什么?从开发平台上我们清清楚楚地得到 了
答案: Java----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
7 7 7 7 个 Linux Linux Linux Linux 手机平台
� Maemo
� Android
� LIMO
� OpenMOKO
� GPE^2
� ALP
� QTopia Phone Edition
Maemo Maemo Maemo Maemo 架构----------------------------------- Android 编程基础
Android Android Android Android 架构----------------------------------- Android 编程基础
LIMO LIMO LIMO LIMO 架构----------------------------------- Android 编程基础
OpneMOKO OpneMOKO OpneMOKO OpneMOKO 架构----------------------------------- Android 编程基础
GPE^2 GPE^2 GPE^2 GPE^2 架构----------------------------------- Android 编程基础
ALP ALP ALP ALP 架构----------------------------------- Android 编程基础
QTopia QTopia QTopia QTopia Phone Phone Phone Phone Edition Edition Edition Edition 架构----------------------------------- Android 编程基础
进程间的通信
Linux 手机平台进程间通信
� Maemo 采用 D-BUS
� Android 采用 OpenBinder
� LiMO 采用 D-BUS
� OpenMoko 采用 D-BUS
� GPE Phone Edition 采用 D-BUS
� ALC 采用 OpenBinder
� Qtopia Phone Edition 采用 D-BUS
进程间通信种类
� D-BUS
� Openbinder
� CORBA/Corbit
� IVY
� GNET
D-BUS----------------------------------- Android 编程基础
Android Android Android Android 学习方法
① 了解什么是 Androi
② 建立开发环境
③ 阅读 SDK 文档
④ 背景知识
� Java
� 面向对象
� 设计模式
� J2ME 、 Brew 、 Symbian
建立 Android Android Android Android 开发环境
① 下载 JDK 5 or JDK 6 (JRE alone is not sufficient) -> 安装 -> 设置环境变量
JAVA_HOME CLASSPATH path
② 下载 Eclipse 3.3 (Europa), 3.4 (Ganymede) IDE for JAVA-> 解压
③ 下载 Android SDK 解压 -> path 里加入 SDK 包中的 tools 目录全路径
④ 下载 ADT 0.8.0 解压
⑤ 打开 Eclipse 安装 ADT 插件----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
Android Android Android Android 开发环境搭建
ADV ADV ADV ADV 的创建
ADT0.9.1 版本
① 在 Eclipse 中创建----------------------------------- Android 编程基础
② 在命令行中创建
打开 CMD 命令行,进入到 Android SDK tools 目录
使用 android 命令列出 target 值
使用 android create avd 命令来创建 AVD
cd E:\Mobile DEV\Android_SDK1.5\tools
android list targets
行为: "create avd":
创建一个新的 Android 虚拟设备。
-t --target 新的 AVD 的 Target ID( 必须 )
-c --sdcard 指向一个共享的 SD 存储卡的路径或是为新的 AVD 定制的新 SD 存储卡的容量大小
-p --path 新 AVD 将被创建的位置路径
-n --name 新 AVD 的名称 ( 必须 )
-f --force 强制创建 ( 覆盖已存在的 AVD)
-s --skin 新 AVD 的皮肤----------------------------------- Android 编程基础
例子 : 将建一个名叫 GPhone 的 AVD , Target ID=2 、 SD 存储卡容量 52M 、路径 C:\AVD\ 、皮肤 SUSE-HVGA- P
查看自己新创建的 ADV : list avd 命令
ADT0.9.0 版本
只能在命令行中创建
开启命令行进入 Android SDK tools 目录
列出 Target ID
创建一个新的 AVD
查看新创建的 AVD
运行指定的 AVD
运行新创建的 AVD:GPhone
android create avd -n GPhone -t 2 -c 52M -p C:\AVD\ -s SUSE-HVGA-P
android list avd
cd E:\Mobile DEV\Android_SDK1.5\tools
andriod list target
android create avd -n GPhone -t 2 -c 52M -p C:\AVD\ -s SUSE-HVGA-P
android list avd
emulator -avd GPhone----------------------------------- Android 编程基础
Windows Windows Windows Windows 平台:
Eclipse IDE 版本
------------JDK+Eclipse+Android SDK+ADT
1. 必须软件
2. 安装过程
① 安装 JAVA JDK SE 1.6
� 设置环境变量
� JAVA_HOME
� JAVA_JRE_HOME
� JRE_HOME
� Android_SDK_HOME
� CLASSPATH
� Path
① JAVA JDK SE 1.6 jdk-6u13-windows-i586-p.exe
② Eclipse 3.4.2 eclipse-java-ganymede-SR2-win32.zip
③ Google Android SDK android-sdk-windows-1.5_r1.zip
④ ADT-0.9.0 ADT-0.9.0.zip
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_13
JAVA_JRE_HOME=C:\Program Files\Java\jdk1.6.0_13\jre
JRE_HOME=C:\Program Files\Java\jre6
Android_SDK_HOME =C:\Mobile Phone DEV\Android SDK
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.
jar;%JRE_HOME%\lib;%JRE_HOME%\lib\rt.jar;%JAVA_JRE_HOME%\lib;%JAVA_JRE_HOME%
\lib\rt.jar
Path= %Android_SDK_HOME%\tools ;%JAVA_HOME%\bin;%JRE_HOME%\bin;%JAVA_JRE
_HOME%\bin;
要使用命令行工具必须配置----------------------------------- Android 编程基础
② 解压 Eclipse 3.4.2
③ 解压 Google Android SDK
④ Eclipse 下安装 ADT 0.9.0
⑤ 设置 Google Android SDK 路径
解压 eclipse-java-ganymede-SR2-win32.zip 到 C:\Eclipse For Android\
解压 android-sdk-windows-1.5_r1.zip 到 C:\Mobile Phone DEV\Android SDK
复制 ADT-0.9.0.zip 到 C:\
打开 C:\Eclipse For Android\eclipse.exe
设置工作路径为 C:\WorkSpace
Help->SoftWare Update->find and install ->Search for new features to install ->Next->New Archived
site-> 选中 C:\ ADT-0.9.0.zip->OK->Finish->ADT-0.9.0.zip 选勾 ->Next->Accept->Next->Finish-
>Install All->Restart “ YES ”
Window->preferences-> 选中 Android->SDK Location 中选择 Google Android SDK 的安装路 径
C:\Mobile Phone DEV\Android SDK->OK----------------------------------- Android 编程基础
3. HelloWorld 程序实例
① 新建一个 Android Project
� Project name 设置工程名 Hello Google Android
� Package name 设置包名 zyf.android.test.hello
� Activity name 设置活动名 Hello
� Application name 设置应用程序名 Hello
� Build Target 设置 AVD API 的版本 3 Android1.5----------------------------------- Android 编程基础
8----------------------------------- Android 编程基础
② 修改 Hello.java 文件 内容如下:
③ 运行 as Android
package package package package zyf.android.test.hello;
import import import import android.app.Activity;
import import import import android.os.Bundle;
import import import import android.widget.TextView;
public public public public class class class class Hello extends extends extends extends Activity {
/** Called when the activity is first created. */
@Override
public public public public void void void void onCreate(Bundle savedInstanceState) {
super super super super .onCreate(savedInstanceState);
// setContentView (R.layout.main);
TextView tv = new new new new TextView( this this this this );
tv.setText( " 这是一个测试 Android 的 helloWorld" );
setContentView(tv);
}----------------------------------- Android 编程基础
④ 代码分析:
在 Android 中,用户界面控件被封装成了各种 Class 叫做 Views 。一个 View 是一个可以显示的控件对
象,比如 RadioButton , Animation , TextLable 等。其中的一个简单的控件是 TextView:
传入 TextView 构造函数的参数是一个 Context 对象,通过这个对象可以使用系统提供的功能接口,比
如加载资源,访问数据库和共享数据等等。 Activity 类从 Context 类继承而来,所以 Activity 本身 是
一个 Context ( Java 中的继承概念)。
TextView 对象构建以后就可以设置要显示的数据了。
tv.setText(" 这是一个测试 Android 的 helloWorld");
最后是连接 TextView 到屏幕 , 类似这样 :
setContentView() 方法可以控制具体哪一个控件和系统的 UI 联系起来(我的理
解是设置为主显示 View )。如果没有设置,屏幕中将会显示空白。
TextView tv = new new new new TextView( this this this this );
setContentView(tv);----------------------------------- Android 编程基础
11----------------------------------- Android 编程基础
Apache Ant IDE 版本
------------JDK+Android SDK +Ant
1. 必须软件
2. 安装过程
① 安装 JAVA JDK SE 1.6
� 设置环境变量
� JAVA_HOME
� JAVA_JRE_HOME
� JRE_HOME
� Android_SDK_HOME
� ANT_HOME
� CLASSPATH
� Path
① JAVA JDK SE 1.6 jdk-6u13-windows-i586-p.exe
② Google Android SDK android-sdk-windows-1.5_r1.zip
③ Apache Ant apache-ant-1.7.1-bin.zip
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_13
JAVA_JRE_HOME=C:\Program Files\Java\jdk1.6.0_13\jre
JRE_HOME=C:\Program Files\Java\jre6
Android_SDK_HOME =C:\Mobile Phone DEV\Android SDK
ANT_HOME=C:\Mobile Phone DEV\Apache Ant\apache-ant-1.7.1
CLASSPATH=.;%ANT_HOME%\lib;%ANT_HOME%\lib\ant.jar;%JAVA_HOME%\lib;%JAV
A_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JRE_HOME%\lib;%JRE_HOME%\lib\r
t.jar;%JAVA_JRE_HOME%\lib;%JAVA_JRE_HOME%\lib\rt.jar
Path=%ANT_HOME%\bin;%Android_SDK_HOME%\tools;%JAVA_HOME%\bin;%JRE_HO
ME%\bin;%JAVA_JRE_HOME%\bin;----------------------------------- Android 编程基础
② 解压 Google Android SDK
③ 解压 apache-ant-1.7.1.zip
3. HelloWorld 程序实例
解压 android-sdk-windows-1.5_r1.zip
到 C:\Mobile Phone DEV\Android SDK
解压 Apache Ant apache-ant-1.7.1.zip
到 C:\Mobile Phone DEV\Apache Ant\apache-ant-1.7.1
① 开始 -> 运行 ->cmd
② cd C:\Mobile Phone DEV\WorkSpace
③ 使用命令行工具来创建一个新工程
④ cd Hello
⑤ ant debug
⑥ cd bin
⑦ emulator -avd Android_SDK1.5
⑧ adb install ./hello-debug.apk
⑨ 在模拟器中运行 hello 程序
android create project -k zyf.hello -n HelloAndroid -t 2 -a AntActivity -p ./Hello----------------------------------- Android 编程基础
Linux Linux Linux Linux 平台:
JDK+Eclipse+Android SDK+ADT
JDK+Android SDK +Ant----------------------------------- Android 编程基础
Activity Activity Activity Activity : : : :
活动是最基本的 Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动
都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并 对
事件做出响应。大多数的应用是由多个屏幕显示组成。例如 : 一个文本信息的应用也许有一个显示发送消息 的
联系人列表屏幕,第二个屏幕用来写文本消息和选择收件人,再来一个屏幕查看消息历史或者消息设置操 作
等。这里每一个这样的屏幕就是一个活动,很容易实现从一个屏幕到一个新的屏幕并且完成新的活动。在 某
些情况下当前的屏幕也许需要向上一个屏 幕活动提供返回值 -- 比如让用户从手机中挑选一张照片返回通讯录
做为电话拨入者的头像。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的 前
一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。
默认
情况下, Android 将会保留从主屏幕到每一
个应用的运行屏幕。
简单理解 Activity 代表一个用户所能看到的屏幕, Activity 主要是处理一个应用的整体性工作,例如, 监
听系统事件 ( 按键事件、触摸屏事件等 ) 、为用户显示指定的 View ,启动其他 Activity 等。所有应用的 Activit y
都继承于 android.app.Activity 类,该类是 Android 提供的基层类,其他的 Activity 继承该父类后,通过 Over ride
父类的方法来实现各种功能,这种设计在其他领域也较为常见。
Intent Intent Intent Intent : : : :
调用 Android 专有类 Intent 进行架构屏幕之间的切换。 Intent 是描述应用想要做什么。 Intent 数据结构两
个最重要的部分是动作和动作对应的数据。典型的动作类型有 :MAIN (活动的门户)、 VIEW 、 PICK 、 EDIT
等。而动作对应的数据则以 URI 的形式进行表示。例如 : 要查看某个人的联系方式,你需要创建一个动作类
型为 VIEW 的 Intent ,以及一个表示这个人的 URI 。
Android 使用了 Intent 这个特殊类,实现在屏幕与屏幕之间移动。 Intent 类用于描述一个应用将会做什 么
事。在 Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有: MAIN ( a ctivity
的门户)、 VIEW 、 PICK 、 EDIT 等。而动作对应的数据则以 URI 的形式进行表示。例如:要查看一个人的 联
系方式,你需要创建一个动作类型为 VIEW 的 intent ,以及一个表示这个人的 URI 。
与之有关系的一个类叫 IntentFilter 。相对于 intent 是一个有效的做某事的请求,一个 intentfilter 则用于 描
述一个 activity (或者 IntentReceiver )能够操作哪些 intent 。一个 activity 如果要显示一个人的联系方式时, 需
要声明一个 IntentFilter ,这个 IntentFilter 要知道怎么去处理 VIEW 动作和表示一个人的 URI 。 IntentFilter 需
要在 AndroidManifest.xml 中定义。
通过解析各种 intent ,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时, activity 将会调用
startActivity(IntentmyIntent) 方法。然后,系统会在所有安装的应用程序中定义的 IntentFilter 中查找,找到最
匹配 myIntent 的 Intent 对应的 activity 。新的 activity 接收到 myIntent 的通知后,开始运行。当 startActivity 方
法被调用将触发解析 myIntent 的动作,这个机制提供了两个关键好处:----------------------------------- Android 编程基础
A 、 Activities 能够重复利用从其它组件中以 Intent 的形式产生的一个请求;
B 、 Activities 可以在任何时候被一个具有相同 IntentFilter 的新的 Activity 取代。
IntentReceiver: IntentReceiver: IntentReceiver: IntentReceiver:
当你希望你的应用能够对一个外部的事件 ( 如当电话呼入时,或者数据网络可用时,或者到了晚上时 ) 做出响
应,你可以使用一个 IntentReceiver 。虽然 IntentReceiver 在感兴趣的事件发生时,会使用 NotificationManage r
通知用户,但它并不能生成一个 UI 。 IntentReceiver 在 AndroidManifest.xml 中注册,但也可以在代码中使用
Context.registerReceiver() 进行注册。当一个 intentreceiver 被触发时,你的应用不必对请求调用 inten treceiver ,
系统会在需要的时候启动你的应用。各种应用还可以通过使用 Context.broadcastIntent() 将它们自己的
intentreceiver 广播给其它应用程序。
Service Service Service Service : : : :
一个 Service 是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中
播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个 activity ,让使用者可以选择歌曲并播 放
歌曲。然而,音乐重放这个功能并没有对应的 activity ,因为使用者当然会认为在导航到其它屏幕时音乐应 该
还在播放的。在这个例子中,媒体播放器这个 activity 会使用 Context.startService() 来启动一个 service ,从而
可以在后台保持音乐的播放。同时,系统也将保持这个 service 一直执行,直到这个 service 运行结束。另外 ,
我们还可以通过使用 Context.bindService() 方法,连接到一个 service 上(如果这个 service 还没有运行将启动
它)。当连接到一个 service 之后,我们还可以 service 提供的接口与它进行通讯。拿媒体播放器这个例子来 说 ,
我们还可以进行暂停、重播等操作。
Content Content Content Content Provider Provider Provider Provider : : : :
Android 应用程序能够将它们的数据保存到文件、 SQLite 数据库中,甚至是任何有效的设备中。当你想
将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准 的
方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。
数据是应用的核心。在 Android 中,
默认
使用鼎鼎大名的 SQLite 作为系统 DB 。但是在 Android 中,使用方
法有点小小的不一样。在 Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数
据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难 ( 正常情况下,你不能读 取
其他的应用的 db 文件 ) , ContentProvider 正是用来解决在不同的应用包之间共享数据的工具。
� 所有被一个 Android 应用程序创建的偏好设置,文件和数据库都是私有的。
� 为了和其他应用程序共享数据,应用程序不得不创建一个 Content Provider
� 要回索其他应用程序的数据,它自己的 Content Provider 必须被调用
� Android 本地 Content Provider 包括:
� CallLog :地址和接收到的电话信息
� Contact.People.Phones :存储电话号码
� Setting.System :系统设置和偏好设置
� 等等----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
Android Android Android Android 虚拟机 Dalvik Dalvik Dalvik Dalvik
Dalvik Dalvik Dalvik Dalvik 冲击
随着 Google 的 AndroidSDK 的发布,关于它的 API 以及在移动电话领域所带来的预
期影响这些方面的讨论不胜枚举。不过,其中的一个话题在 Java 社区是一石激起千层浪,
这就是 Android 平台的基础 —— Dalvik 虚拟机。
Dalvik Dalvik Dalvik Dalvik 和标准 Java Java Java Java 虚拟机 (JVM) (JVM) (JVM) (JVM) 首要差别
Dalvik 基于寄存器,而 JVM 基于栈。,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花 费
的时间更短。
Dalvik Dalvik Dalvik Dalvik 和 Java Java Java Java 运行环境的区别
Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik 应用作为一个独立 的
Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭 .
Dalvik Dalvik Dalvik Dalvik 形势
Dalvik 的诞生也导致人们开始忧虑 Java 平台的第一次大规模的分道扬镳或许已经是进行时了 —— 有人已经 把
Davlik 和微软的 JVM 以及 Sun 对微软的诉讼联系起来,等着看 Google 身上是否也会发生类似事情;另外 一
些人则指出, Google 并没有宣称 Dalvik 是一个 Java 实现,而微软却是这样做的。 Sun 也对可能带来的阵营
分裂表达了忧虑情绪,并提出和 Google 合作来保证 Dalvik 和 JVM 之间的兼容性 —— Google 对此的解释是,
Dalvik 是对解决目前 JavaME 平台上分裂的一次尝试,也是为了提供一个拥 有较少限制许可证的平台。甚至
还有人怀疑这是否是 Sun 和 Google 两大阵营对 Java 之未来的一次大规模较量。----------------------------------- Android 编程基础
Android Android Android Android 中各种 JAVA JAVA JAVA JAVA 包的功能描述
在 Android 的应用程序开发中,通常使用的是 JAVA 语言,除了需要熟悉 JAVA 语
言的基础知识之外,还需要了解 Android 提供的扩展的 JAVA 功能。
在一般的 JAVA 应用中,如果需用引用基础类库,通常需要使用如下的方式:
import javax.swing.*;
以上代码表示了引用 JAVA 的 GUI 组件 Swing,javax.swing 即 JAVA 中的一个包。
android 提供一些扩展的 JAVA 类库,类库分为若干个包,每个包中包含若干个类。
重要包的描述:
android.app :提供高层的程序模型、提供基本的运行环境
android.content :包含各种的对设备上的数据进行访问和发布的类
android.database :通过内容提供者浏览和操作数据库
android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上 .
android.location :定位和相关服务的类
android.media :提供一些类管理多种音频、视频的媒体接口
android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口
android.os :提供了系统服务、消息传输、 IPC 机制
android.opengl :提供 OpenGL 的工具
android.provider :提供类访问 Android 的内容提供者
android.telephony :提供与拨打电话相关的 API 交互
android.view :提供基础的用户界面接口框架
android.util :涉及工具性的方法,例如时间日期的操作
android.webkit :
默认
浏览器操作接口
android.widget :包含各种 UI 元素(大部分是可见的)在应用程序的屏幕中使用----------------------------------- Android 编程基础
Android Android Android Android 的相关文件类型
Java Java Java Java 文件 ----- ----- ----- ----- 应用程序源文件
android 本身相当一部分都是用 java 编写而成 ( 基本上架构图里头蓝色的部份都是用 Java 开发的 ) , android 的
应用必须使用 java 来开发。
Class Class Class Class 文件 ------Java ------Java ------Java ------Java 编译后的目标文件
不像 J2se , java 编译成 class 就可以直接运行, android 平台上 class 文件不能直接在 android 上运行。由于 G oogle
使用了自己的 Dalvik 来运行应用,所以这里的 class 也肯定不能在 AndroidDalvik 的 java 环境中运行, androi d
的 class 文件实际上只是编译过程中的中间目标文件,需要链接成 dex 文件后才能在 dalvik 上运行。
Dex Dex Dex Dex 文件 -----Android -----Android -----Android -----Android 平台上的可执行文件
Android 虚拟机 Dalvik 支持的字节码文件格式 Google 在新发布的 Android 平台上使用了自己的 Dalvik 虚拟 机
来定义,这种虚拟机执行的并非 Java 字节码,而是另一种字节码: dex 格式的字节码。在编译 Java 代码之 后 ,
通过 Android 平台上的工具可以将 Java 字节码转换成 Dex 字节码。虽然 Google 称 Dalvik 是为了移动设备定
做的,但是业界很多人认为这是为了规避向 sun 申请 Javalicense 。这个 DalvikVM 针对手机程式 /CPU 做过 最
佳化,可以同时执行许多 VM 而不会占用太多 Res ource 。
Apk Apk Apk Apk 文件 -------Android -------Android -------Android -------Android 上的安装文件
Apk 是 Android 安装包的扩展名,一个 Android 安装包包含了与某个 Android 应用程序相关的所有文件。 apk
文件将 AndroidManifest.xml 文件、应用程序代码 (.dex 文件 ) 、资源文件和其他文件打成一个压缩包。一个工
程只能打进一个 .apk 文件。----------------------------------- Android 编程基础
Android Android Android Android 的应用程序结构分析: HelloActivity
本例以一个简单的 HelloActivity 程序为例,简单介绍 Android 应用程序的源代码结构。事实
上, Android 应用程序虽然不是很复杂,但是通常涉及了 JAVA 程序 ,XML 文件, Makefile
多方面的内容。 HelloActivity 虽然简单,但是麻雀虽小,五脏俱全,是学习 Android 应用程
序的最好示例。
第一部分: HelloActivity HelloActivity HelloActivity HelloActivity 的源代码
HelloActivity 工程的源代码在 Android 目录的 development/samples/HelloActivity/ 中,代码的
结构如下所示:
其中 tests 是一个独立的项目,可以暂时不考虑。其他部分看作一个 Android 的一应用程序
的工程。这个工程主要的组成部分如下所示:
AndroidManifest.xml :工程的描述文件,在运行时有用处
Android.mk :整个工程的 Makefile
development/samples/HelloActivity/
|-- Android.mk
|-- AndroidManifest.xml
|-- res
| |-- layout
| | `-- hello_activity.xml
| `-- values
| `-- strings.xml
|-- src
| `-- com
| `-- example
| `-- android
| `-- helloactivity
| `-- HelloActivity.java
`-- tests
|-- Android.mk
|-- AndroidManifest.xml
`-- src
`-- com
`-- android
`-- helloactivity
`-- HelloActivityTest.java----------------------------------- Android 编程基础
res :放置资源文件的目录
src/com/example/android/helloactivity/HelloActivity.java :这是 JAVA 类文件,这个文件的路径
表示在 Andorid 的 JAVA 包的结构中的位置, 这个包的使用方式为
com.example.android.helloactivity 。
第二部分: 编译的中间结果
这个 HelloActivity 工程经过编译后将生成
out/target/common/obj/APPS/He lloActivity_intermediates/ 目录, 这个目录中的内容都是
HelloActivity 工程相关的, 更具体地说都与 development/samples/HelloActivity/ 中的
Android.mk 文件相关。
classes.dex
是一个最重要的文件,它是给 Android 的 JAVA 虚拟机 Dalvik 运行的字节码文
classes.jar
是一个 JAR 文件, JAR 的含义为 Java ARchive ,也就是 Java 归档,是一种与平台
无关的文件格式,可将多个文件合成一个文件。解压缩之后的目录结构: (JAVA 标准编译得
到的类 )
out/target/common/obj/APPS/He lloActivity_intermediates/
|-- classes.dex (字节码)
|-- classes.jar ( JAR 文件 )
|-- public_resources.xml (根据 resources 结构生成的 xml )
`-- src
|-- R.stamp
`-- com
`-- example
`-- android
`-- helloactivity
`-- R.java ( resources 生成的文件)----------------------------------- Android 编程基础
各个以 class 为扩展名的文件,事实上是 JAVA 程序经过编译后的各个类的字节码。
第三部分: 目标 apk apk apk apk 文件
目标 apk 文件是 Android 的 JAVA 虚拟机 Dalvik 安装和运行的文件,事实上这个 apk 文件将
由编译的中间结果和原始文件生成。 apk 文件的本质是一个 zip 包。这个 APK 包解压缩后的
目录结构如下所示:
值得注意的是,这里的 xml 文件经过了处理,和原始的文件不太一样,不能按照文本文件
的方式阅读。
classes
|-- META-INF
| `-- MANIFEST.MF
`-- com
`-- example
`-- android
`-- helloactivity
|-- HelloActivity.class
|-- R$attr.class
|-- R$id.class
|-- R$layout.class
|-- R$string.class
`-- R.class
out/target/product/generic/obj/APPS/HelloActivity_intermediates/package.apk_FILES/
|-- AndroidManifest.xml
|-- META-INF
| |-- CERT.RSA
| |-- CERT.SF
| `-- MANIFEST.MF
|-- classes.dex
|-- res
| `-- layout
| `-- hello_activity.xml
`-- resources.arsc----------------------------------- Android 编程基础
第四部分: 源代码的各个文件
Android.mk 是整个工程的 “ Makefile ” ,其内容如下所示:
� LOCAL_PATH:= $(call my-dir)
� include $(CLEAR_VARS)
� LOCAL_MODULE_TAGS := samples
� # Only compile source java files in this apk.
� LOCAL_SRC_FILES := $(call all-java-files-under, src)
� LOCAL_PACKAGE_NAME := HelloActivity
� LOCAL_SDK_VERSION := current
� include $(BUILD_PACKAGE)
� # Use the following include to make our test apk.
� include $(call all-makefiles-under,$(LOCAL_PATH))
这个文件在各个 Android 的工程中都是类似的,其中 LOCAL_PACKAGE_NAME 表示了这
个包的名字。 LOCAL_MODULE_TAGS 表示了模块的标,在这里使用的是
samples ,正式的应用程序( packages 目录中的应用)中多使用 eng development 。
AndroidManifest.xml 是这个 HelloActivity 工程的描述文件,其内容如下所示:
其中 package 用于说明这个包的名称, android:labeapplication 中的内容是表示这个应用程序
在界面上显示的标题, activity 中的 android:name 表示这个 Android 的活动的名称。
----------------------------------- Android 编程基础
文件 src/com/example/android/helloactivity/HelloActivity.java 是程序主要文件,由 JAVA 语言
com.example.android.helloactivity 表示的是这个包的名称 , 在文件的头部引入了两个包
android.app.Activity 是一个 Android 活动( Activity )包,每一个 Android 活动都需要继承
Activity 类。
包 android.os.Bundle 用于映射字符串的值。
onCreate() 是一个重载的函数,在这个函数中实现应用程序创建的所执行的过程。其中
setContentView() 设置当前的视图( View )。
设置的方法是使用一个文件,这个文件因此决定了视图中包含的内容。这里使用的是
R.layout.hello_activity ,表示从 res/layout/ 目录中使用 hello_activity.xml 文件。
res/layout/hello_activity.xml 文件的内容如下所示:
其中定义了一个可编辑的文本( EditText ),下面的各项其实是它的各种属性, android:text 表示这个文本 的
内 容 ,string/hello_activity_text_text 表 示 找 到 相 应 的 文 件 , 也 就 是 res/value/string.xml 文 件 中 的
hello_activity_text_text 文本。
res/value/string.xml 的内容如下所示:
hello_activity_text_text 文本被 res/layout/hello_activity.xml 文件引用,正是应用程序运行时在
屏幕显示的文本。
package package package package com.example.android.helloactivity;
import import import import android.app.Activity;
import import import import android.os.Bundle;
public public public public class class class class HelloActivity extends extends extends extends Activity {
public public public public HelloActivity() {
@ Override
public public public public void void void void onCreate(Bundle savedInstanceState) {
super super super super .onCreate(savedInstanceState);
setContentView(R.layout.hello_activity);
----------------------------------- Android 编程基础
Android Android Android Android ADB ADB ADB ADB 工具使用
adb(Android Debug Bridge) 是 Android 提供的一个通用调试工具,借助这个工具,我妈可以管理设备或手机 模
拟器的状态。
adb adb adb adb 功能操作:
� 快速更新设备或手机模拟器中的代码,如应用或 Android 系统升级
� 在设备上运行 shell 命令
� 管理设备或手机模拟器上预定端口
� 在设备或手机模拟器上复制、粘贴文件
adb adb adb adb
常用
操作:
安装应用到模拟器
Android 没有提供一个卸载应用的命令,只能手动删除:
进入设备或模拟器的 Shell
通过以上命令,可以进入设备或模拟器的 shell 环境中,在这个 Linux Shell 中,你可以执行各种 Linux 的命 令 ,
另外如果只想执行一条 shell 命令,可以采用以下方式:
会打印出内核的调试信息
可以设置任意的
端口号
,做为主机向模拟器或设备的请求端口。如 :
adb install app.apk
adb shell
cd data/app
rm app.apk
adb shell
adb shell [command]
adb shell dmesg
adb forward tcp:5555 tcp:8000----------------------------------- Android 编程基础
可向一个设备或从一个设备中复制文件
� 复制一个文件或目录到设备或模拟器上:
� 从设备或模拟器上复制一个文件或目录
搜索 / 等待模拟器、设备实例
取得当前运行的模拟器、设备的实例列表及每个实例的状态 | 等待正在运行的设备
查看 Bug 报告
记录无线通讯日志
无线通讯记录日志非常多,在运行时没必要记录,可以通过命令设置记录
获取设备 ID 和序列号
访问数据库 SQLite3
adb push
adb push test.txt /tmp/test.txt
adb pull
adb pull /android/lib/libwebcore.os
adb devices
adb wait-for-device
adb bugreport
adb shell
logcat -b radio
adb get-product
adb get-serialno
adb shell
sqlite3----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
封面----------------------------------- Android 编程基础
Android Android Android Android 模拟器
模拟器参数
option 选项
emulator [option] [-qemu args]
-sysdir 为模拟器在 目录中搜索系统硬盘镜像
-system 为模拟器从 文件中读取初始化系统镜像
-datadir 设置用户数据写入的目录
-kernel 为模拟器设置使用指定的模拟器内核
-ramdisk 设置内存 RAM 镜像文件 (
默认
为 /ramdisk.img)
-image 废弃,使用 -system 替代
-init-data 设置初始化数据镜像 (
默认
为 /userdata.img)
-initdata 和 "-init-data " 使用方法一致
-data 设置数据镜像 (
默认
为 /userdata-qemu.img)
-partition-size system/data 分区容量大小 (MB)
-cache 设置模拟器缓存分区镜像 (
默认
为 零时文件 )
-no-cache 禁用缓存分区
-nocache 与 "-no-cache" 使用方法相同
-sdcard 指定模拟器 SDCard 镜像文件 (
默认
为 /sdcard.img)
-wipe-data 清除并重置用户数据镜像 ( 从 initdata 拷贝 )
-avd 指定模拟器使用 Android 虚拟设备
-skindir 设置模拟器皮肤 在 目录中搜索皮肤 (
默认
为 /skins 目录 )
-skin 选择使用给定的皮肤
-no-skin 不适用任何模拟器皮肤
-noskin 使用方法与 "-no-skin" 相同
-memory 物理 RAM 内存大小 (MB)
-netspeed 设置最大网络下载、上传速度
-netdelay 网络时延模拟
-netfast 禁用网络形态
-tarce 代码配置可用
-show-kernel 显示内核信息
-shell 在当前终端中使用根 Shell 命令
-no-jni Dalvik 运行时禁用 JNI 检测
-nojni 使用方法与 "-no-jni" 相同
-logcat 输出给定 tag 的 Logcat 信息----------------------------------- Android 编程基础
-no-audio 禁用音频支持
-noaudio 与 "-no-audio" 用法相同
-audio 使用指定的音频 backend
-audio-in 使用指定的输入音频 backend
-audoi-out 使用指定的输出音频 backend
-raw-keys 禁用 Unicode 键盘翻转图
-radio 重定向无线模式接口到个性化设备
-port 设置控制台使用的 TCP 端口
-ports , 设置控制台使用的 TCP 端口和 ADB 调试桥使用的 TCP 端口
-onion 在屏幕上层使用覆盖 PNG 图片
-onion-alpha 指定上层皮肤半透明度
-onion-rotation 0|1|2|3 指定上层皮肤旋转
-scale 调节模拟器窗口尺寸 ( 三种: 1.0-3.0 、 dpi 、 auto)
-dpi-device 设置设备的 resolution (dpi 单位 ) (
默认
165)
-http-proxy 通过一个 HTTP 或 HTTPS 代理来创建 TCP 连接
-timezone 使用给定的时区,而不是主机
默认
的
-dns-server 在模拟系统上使用给定的 DNS 服务
-cpu-delay 调节 CUP 模拟
-no-boot-anim 禁用动画来快速启动
-no-window 禁用图形化窗口显示
-version 显示模拟器版本号
-report-console 向远程 socket 报告控制台端口
-gps 重定向 GPS 导航到个性化设备
-keyset 指定按键设置文件名
-shell-serial 根 shell 的个性化设备
-old-system 支持旧版本 (pre 1.4) 系统镜像
-tcpdump 把网络数据包捕获到文件中
-bootchart bootcharting 可用
-qemu args.... 向 qemu 传递参数
-qemu -h 显示 qemu 帮助
-verbose 和 "-debug-init" 相同
-debug 可用、禁用调试信息
-debug- 使指定的调试信息可用
-debug-no- 禁用指定的调试信息
-help 打印出该帮助文档
-help- 打印出指定 option 的帮助文档
-help-disk-images 关于硬盘镜像帮助
-help-keys 支持按钮捆绑 ( 手机快捷键 )
-help-debug-tags 显示出 -debug 命令中的 tag 可选值
-help-char-devices 个性化设备说明
-help-environment 环境变量
-help-keyset-file 指定按键绑定设置文件
-help-virtula-device 虚拟设备管理----------------------------------- Android 编程基础
-help-sdk-images 当使用 SDK 时关于硬盘镜像的信息
-help-build-images 当构建 Android 时,关于硬盘镜像的信息
-help-all 打印出所有帮助----------------------------------- Android 编程基础
在 Android 中,进程完全是应用程序的实现细节,不是用户一般想象的那样。
它们的用途很简单:
� 通过把不信任或是不稳定的代码放到其他进程中来提高稳定性或是安全性
� 通过在相同的进程中运行多个 .apk 代码来减少消耗
� 通过把重量级代码放入一个分开的进程中来帮助系统管理资源。该分开的进程可以被应用程序的其他 部
分单独地杀死
� 如果两个没有共享相同的用户 ID 的 .apk 试图在相同的进程中运行,这将不被允许,并且系统会为每一
个 apk 程序创建不同的进程会
� Android 让一个应用程序在单独的线程中,指导它创建自己的线程
� 应用程序组件( Activity 、 service 、 broadcast receiver )所有都在理想的主线程中实例化
� 没有一个组件应该执行长时间或是阻塞操作 ( 例如网络呼叫或是计算循环 ) 当被系统调用时,这将中断所
有在该进程的其他组件
� 你可以创建一个新的线程来执行长期操作----------------------------------- Android 编程基础
Android Android Android Android 释放手机资源,进程释放优先级
当系统资源消耗, Android 将会杀死一些进程来释放资源。
进程优先级顺序:
① 前台进程:
包含一个前台 Activity 、包含一个正在运行的广播接收器、正在运行的服务(当前用户所需的 Activity 、
正在屏幕顶层运行的 Activity )
② 可视进程:
包含一个可视化的 Activity ( Activity 可视的,但是不是在前台的( onPause ))、例如显示在一个前台对
话框之后的以前的 Activity )
③ 服务进程:
包含一个被开启的服务 ( 处理服务,不是直接可视,例如媒体播放器,网络上传、下载 )
④ 后台进程:
包含一个不可视的 Activity( 带有一个当前不可视的 Activity 、可以在任意时刻杀死该进程来回收内存 )
⑤ 空进程
没有持有任何应用程序组件----------------------------------- Android 编程基础
Android Android Android Android 应用开发 1 1 1 1
分析 Hello Hello Hello Hello Android Android Android Android
打开 Hello Android 工程
Main.xml
src 文件夹 HelloAndroid.java R.java Android Library Assets 文件夹
源文件 主程序文件 资源文件 Java 库 静态文件 打包
res 文件夹
drawable 文件夹 layout 文件夹 values 文件夹
程序图标 (ico.png) 布局 UI (main.xml) 程序用到的 String 、颜色 **(string.xml)
AndroidMainfest.xml
描述应用程序、构成、组件、权限
bin 文件夹
classes.dex HelloAndroid.apk 自定义的包文件夹
编译的 java 二进制 码 Android 安装包 (APK 包 ) 存放编译后的字节码文件
整体布局 表示线性布局
xmlns:android = "http://schemas.android.com/apk/res/android" 名字空间
android:orientation = "vertical" 控件布局 垂直往下布局
android:layout_width = "fill_parent"
android:layout_height = "fill_parent" 上层控件填充满
图形空间 派生于 View
----------------------------------- Android 编程基础
R.java
通过 res 文件夹下的 xml 文件定义自动生成的, main.xml ico.png string.xml 是配套的关联,进行修改后
R.java 自动重新生成
AndroidManifest.xml
有关版本,程序信息, java 包,程序图标,程序记录信息等。
Manifest.xml 文件轮廓
添加编辑框与按钮
package package package package zyf.Study.AndroidSturdyByMyself;
import import import import android.app.Activity;
import import import import android.os.Bundle;
import import import import android.view.View;
import import import import android.view.View.OnClickListener;
import import import import android.widget.Button;
import import import import android.widget.EditText;
import import import import android.widget.TextView;
public public public public class class class class AndroidSturdyByMyself extends extends extends extends Activity {
private private private private EditText getNameEditText ;
private private private private Button button_Login ;
private private private private TextView show_Login_TextView ;
/** Called when the activity is first created. */
@Override
public public public public void void void void onCreate(Bundle savedInstanceState) {
super super super super .onCreate(savedInstanceState);
setContentView(R.layout. main );
getNameEditText =(EditText)findViewById(R.id. widget29_getName_EditText );
button_Login =(Button)findViewById(R.id. widget30_Login_Button );
show_Login_TextView =(TextView)findViewById(R.id. widget31_showLogin_TextView );
button_Login .setOnClickListener( new new new new OnClickListener(){
@Override
public public public public void void void void onClick(View v) {
// TODO TODO TODO TODO Auto-generated method stub
show_Login_TextView .setText( getNameEditText .getText()+ " 欢迎您进入 " );
}----------------------------------- Android 编程基础
使用 Intent Intent Intent Intent 启动另一个 Activity Activity Activity Activity
在多个 Activity Activity Activity Activity 之间切换时候,注意每个 Activity Activity Activity Activity 都应在 AndroidManifest.xml AndroidManifest.xml AndroidManifest.xml AndroidManifest.xml 中有所声
明定义(如下)
在不同 Task Task Task Task 中启动 Activity Activity Activity Activity
Intent.FLAG_ACTIVITY_NEW_TASK
Intent showNextPage_Intent= new new new new Intent();
showNextPage_Intent.setClass(UsingBundel. this this th
蓝牙/串口转换器----带RS-232/RS-485口! BLU232型蓝牙/串口转换器只有DB-9/DB-9转接头大小,将计算机或智能手机的蓝牙信号转换出RS-232/RS-485口,可以虚拟成为本地串口。
BLU232 蓝牙/串口转换器 RS-232/RS-485通用、5V供电、1200-115200bps 10米
波仕BLU232蓝牙/串口转换器将计算机或者智能手机的蓝牙信号转换出RS-232或RS-485串口。BLU232采用高性能低功耗蓝牙无线通信芯片,内置高性能微处理器实现串口数据的传输,可广泛应用于各种场合的短距离无线通信、工业控制领域。产品本身可将自己的串口接到计算机后用串口调试助手程序进行通信速率、格式等的设定。BLU232可以作为蓝牙信号扩展出的虚拟串口,无需修改已有的串口软件。
1、硬件安装
BLU232的硬件安装非常简单:接上5V电源即可。在电源端子旁边有一个小LED(发光二极管),当产品通电后,LED闪烁表示正在连接蓝牙,如果连接成功后LED会一直亮着。BLU232可以连接到计算机或者智能手机的蓝牙信号,此时BLU232就相当于是计算机扩展出来的一个无线RS-232/485口。串口
默认
为波特率为9600,配对密码:1234,
默认
名称:BOLUTEK。BLU232的RS-232/485串口有2个用处:1、在传输模式下作为蓝牙转换出来的串口,2、在设置模式下用于对BLU232产品进行设置。注意BLU232有DB-9孔和DB-9针的RS-232口,它们实质上是同一个口,仅仅是为了方便用户的使用。BLU232的DB-9孔可以自己外插计算机的RS-232针座,同时BLU232的DB-9针座与计算机的RS-232针座的引脚分配完全一样,所以可以直接插RS-232设备。BLU232的RS-232口只有RXD、TXD、GND三线信号。RS-485信号的参考地线与RS-232的GND是一样的、与外接5V电源的GND也是一样的。RS-485口带600W浪涌保护。 2、性能指标
无线通信方式 蓝牙2.1 载频 2.412~2.484GHz
天线 内置 尺寸 57*36*17mm
最远通信距离 10米 * 重量 30克
电气接口 RS-232/RS-485 供电电压 5V (±0.5V) DC
波特率 1200bps~115200bps 功耗 <50mA
* 实际通信距离与环境、障碍物、位置等有关。 3、软件安装以及使用 3.1 为计算机蓝牙扩展无线串口BLU232可以为带蓝牙的计算机扩展出一个无线串口。1、将BLU232接上电源。 2、计算机蓝牙——“添加蓝牙设备”,无线扫描找到蓝牙BOLUTEK,输入配对密码:1234,灯闪烁。 3、BLU232
默认
波特率等格式为(9600,n,8,1),扩展出的串口号在windows XP/7下
默认
为COM4。用户可以查看“控制面板”的“系统设备管理器端口”,就会发现增加了一个新的“蓝牙通信端口(COM4)”,这就是虚拟串口号。在WINDOWS下可以使用“串口调试助手”等软件打开COM4进行通信,此时灯连续亮。注意串口通信软件的波特率必须与BLU232的波特率一致。3.2 为智能手机蓝牙扩展无线串口BLU232可以为带蓝牙的智能手机扩展出一个无线串口。1、将BLU232接上电源,灯闪烁。 2、蓝牙——“添加蓝牙设备”,无线扫描找到蓝牙BOLUTEK,输入配对密码:1234,灯闪烁。 3、BLU232
默认
为从机状态、波特率等格式为(9600,n,8,1)。 在ANDROID下可以使用“蓝牙串口.apk”等软件进行智能手机的串口通信,此时灯连续亮。 4、BLU232的设置指令 BLU232可以使用“串口调试助手”等软件进行波特率等参数的设置。1、将BLU232接上电源。 2、计算机蓝牙——“添加蓝牙设备”,无线扫描找到蓝牙BOLUTEK,输入配对密码:1234,灯闪烁。(如果已经配对成功就不必再配对了)3、现在先不要打开蓝牙串口COM4;使用DB-9孔端的串口接到计算机的RS-232口(比如COM1号口)来进行设置;4、运行“串口调试助手”软件,在发送栏键入指令,每一个指令都必须以Enter 结尾,就是必须在指令的最后再多敲一个回车键。5、
默认
波特率为9600,但是如果更改了波特率,那么以后发送指令的波特率必须是新设置的波特率,当然也可以改回来。6、指令不区分大写和小写,效果一样。7、设置完毕后就可以打开蓝牙串口COM4并且通信了! 在“串口调试助手”的发送栏填写 AT+HELP 再敲回车换行,此时光标停留在第2行
### 回答1:
系统端口扫描是网络安全相关领域内的一个比较重要的技术,其作用是对计算机系统进行全面的检测,从而发现系统中可能存在的漏洞或安全隐患。本文将介绍我所设计的一款系统端口扫描程序,它是基于Java语言开发的,具有高效、可靠的特点。
首先,我的程序可以快速、准确地扫描指定IP地址的端口,并生成
端口号
和端口状态的报告。程序的主要功能包括三个方面:扫描单个端口、扫描一段端口范围、扫描所有端口。用户可以根据自己的需要来选择相应的功能。同时,程序支持多线程的方式进行扫描,从而提高了扫描效率。
其次,我的程序针对常见的网络攻击方式进行了优化,比如SYN Flood等攻击方式。程序能够自动识别这些攻击方式并及时报警,从而避免了系统遭受攻击。
最后,我的程序考虑到了用户友好性的因素,采用了简洁明了的界面,同时提供了详细的用户帮助文档,从而方便了用户的操作。
总之,我的系统端口扫描程序设计了一套完备的解决方案,具有高效、可靠、安全、易用等多方面的优点,适用于各种规模的网络系统,可以为用户提供全面的安全保障。
### 回答2:
系统端口扫描课程设计 Java
系统端口扫描是计算机网络中重要的操作,也是网络安全领域中的必备技能之一。本文将介绍如何使用 Java 编程语言来实现一个简单的系统端口扫描程序。
端口是计算机系统网络通讯中最基本的单位,它负责建立网络连接、传输数据等功能。
常用
的计算机端口有 0~65535 个,其中 1~1023 个是被
默认
分配为标准端口使用。通过扫描端口,我们可以了解到目标主机上运行着哪些服务,从而更有针对性的进行安全检查。
1. 定义端口列表
首先我们需要定义一张端口列表,包含了我们要扫描的所有端口。可以使用 Java 中的数组来实现,示例代码如下:
```java
int[] portList = {21, 22, 23, 25, 53, 80, 110, 143, 443, 3306};
2. 遍历端口列表
定义好端口列表之后,我们需要遍历列表中的所有端口,并检查这些端口是否处于开放状态。可以使用 Java 中的 for 循环来遍历端口列表,代码示例如下:
```java
for (int port : portList) {
//检查端口状态
3. 检查端口状态
在遍历端口列表的同时,我们需要检查每个端口的开放状态。可以使用 Java 的 Socket 类来实现。代码示例如下:
```java
Socket socket = null;
try {
socket = new Socket(host, port);
//端口开放
} catch (IOException e) {
//端口关闭
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {}
在代码中,我们首先尝试连接目标主机的指定端口,如果连接成功,则说明该端口处于开放状态;如果连接失败,则说明该端口处于关闭状态。
4. 整合代码
将以上三步操作整合起来,即可实现一个简单的系统端口扫描程序。代码示例如下:
```java
import java.io.IOException;
import java.net.Socket;
public class PortScanner {
public static void main(String[] args) {
//目标主机 IP
String host = "localhost";
//端口列表
int[] portList = {21, 22, 23, 25, 53, 80, 110, 143, 443, 3306};
//遍历端口列表,检查端口状态
for (int port : portList) {
Socket socket = null;
try {
socket = new Socket(host, port);
//端口开放
System.out.println(port + " open");
} catch (IOException e) {
//端口关闭
System.out.println(port + " closed");
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {}
通过以上简单的代码实现,我们可以自己编写一个系统端口扫描程序。当然,在实际的安全检查中,通常需要更加完善和专业的工具来完成复杂的操作。希望读者在学习完本文之后,能够对系统端口扫描有更加深入的了解。
### 回答3:
系统端口扫描是网络安全领域非常重要的一个主题,它能够帮助我们发现网络系统是否存在安全漏洞,进而采取相应措施进行加固。为了学习和深入理解系统端口扫描的原理和过程,我进行了一个课程设计,使用Java语言进行编写。
首先,我定义了一个TCP端口扫描的接口,里面包括了一些方法,例如设置扫描的主机IP地址、定义扫描的端口范围、启动扫描等。然后使用Java的多线程机制,实现了并发的端口扫描,加快了扫描的速度。
在代码的实现过程中,定义了一个Socket对象,用于与主机建立连接,通过检测是否抛出异常来判断是否开放了该端口。同时,为了提高扫描的效率,设置了超时时间,当连接的时间超过超时时间时,会自动断开连接。
除此之外,还实现了一个简单的用户界面,让用户可以进行设置扫描的目标主机和端口范围,同时还能够实时显示扫描的进度和结果。为了方便用户对扫描结果的分析,还将结果以表格形式进行展示,包括IP地址、开放的
端口号
等信息。
综上所述,我的系统端口扫描课程设计使用了Java语言进行编写,实现了TCP端口的扫描,并通过多线程和超时机制提高了扫描的效率。同时,用户界面设计也使得用户可以方便地进行操作和分析结果。这个课程设计的编写过程不仅增强了我的Java编程能力,也提高了我的网络和安全方面的知识水平。