linux设置问题,详细请见下面说明,谢谢。

sy1024 2009-08-30 11:19:55
我自己用路由建了个局域网,网关本来是192.168.0.1,发现主机名也被改成bogon
从eth0上看到主机名是localhost,有谁知道是怎么回事啊。
现在2台机器都能够上网,但是2台机器相互ping不通。
用traceroute 192.168.0.1 跟踪路由
返回:
traceroute to 192.168.0.1(192.168.0.1) 30hops max 38byte packets

l bogon(192.168.0.1) 7.413 ms 4.384 ms 0.977ms

请问为什么linux的主机名不显示localhost 而是显示bogon(192.168.0.1),该怎么设置系统啊?
现在2台机器都能上网:ip分别为 192.168.0.6 和192.168.0.10
但这2个ip相互都ping不通,怎么设置才能让2台机器ping通啊?
有朋友知道的,请帮忙指教下,要是觉得我说的不明白,可以加我的qq:913949655联系,或者发邮件:sy19831024@126.com
先谢谢了。
...全文
133 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
neohope 2009-08-31
  • 打赏
  • 举报
回复
修改hostname啊
unixlinuxsys 2009-08-31
  • 打赏
  • 举报
回复
bogon 的问题,我也碰到过

1\dhcp时root模式修改hosts文件
restart,指定ip

2\2.6.18以下的版本会,最好update到更高版本

3\正确设置防火墙,

很好用的U盘系统盘制作工具这次出的所谓MaxDOS 密码读取工具,其实只是读取了安装日志LOG里的设置值,并不是真正的MD5值被编译,本来不想保留这个东西的,但是如果不保留这个LOG文件的话,又无法完成自动卸载,怕有些人又说是什么恶意软件,卸载都不能,你出了个密码读取器对我来说没什么损失,但是你害的人可能更多,你也辛苦跟踪了这个安装文件这么久...如果密码不想被读取很简单,就是直接删除 x:\windows\system32\sys56s.ini (2000为winnt) 这个文件,或者将其改名成其它文件名,他就读不出来了,但是如果删除了这个文件就会造成无法自动卸载 MAXDOS程序,当然你也可以备份一份起来再删除...如果不懂的删的话,直接下载附件中的程序运行一下就会自动删除.这个问题我会在近期解决.对此造成的问题我也有错,对不起... MaxDOS 5.6S 说明文件 如果您有何问题,请在此跟贴,或者到我论坛中发问。谢谢。 1.加入了10多种新型网卡驱动,以及更新以前一些驱动存在的问题. 2.支持DOS下直接访问局域网的共享资源,可以读写共享目录,当然要共享目录要开启写权限. 当然您还可以使用此功能来实现网刻,在GHOST直接调用共享目录里的.GHO文件. 3.新型的网刻模式,让菜鸟也懂的网刻.全操作中文界面,只需一键即可完成网刻. 4.支持引导自已制作的标准1.44M/2.88M IMG镜像,请将镜像更名为MaxDiy.IMG存放到C:\的 根目录下(即C:\MaxDiy.IMG)就可以正常引导.且可以在安装时设置密码. 5.加入一键恢复/备份,可直接在菜单中选择备份或还原镜像.支持镜像存放在 D/E/F/G分区. 6.新的NTFS分区读写程序,更稳定,且支持LINUX的ext2/ext3和隐藏分区读写,支持长文件名. 7.加入HDDREG 1.51版,MHDD 4.6版,以及SPFDISK中文版. 8.更新GHOST为 8.3版,不过这里要说一下喜欢玩新的朋友,GHOST 8.2版不支持 GHOST 8.3 版制作的镜像.也就是说如果您用 8.3做好母盘的镜像,以前MAXDOS 5.5S客户端的将不能 识别8.3制作的镜像。如果要使用 8.3版GHOST,请记住母盘的镜像一样要使用GHOST 8.2 来制作.您可以将 GHOST 8.2存放在硬盘中调用. 9.修正上个版本的一些小问题,以及汉化一些程序. 10.加入对USBCD的支持. 同时在我们的网站上也即将提供了MAXDOS 5.6s的光盘版,PXE镜像版,U盘版,以及一些插件.如 果您需要这些,请访问我们的网站 Http://Www.Pzz.Cn 或者 Http://Www.MaxDOS.Net 11.加入了新网卡驱动如下: nForce 1/2/3/4 系列 ULi PCI Fast Ethernet Controller ULi Electronics Inc. Realtek RTL8136/810x Family Fast Ethernet NIC Realtek RTL8168/8111 PCI-E Gigabit Ethernet NIC D-Link DFE-550TX FAST Ethernet 10/100 Adapter Sundance ST201 based Adapter NT Driver D-link DGE-530TX FAST Ethernet 10/100 Adapter Tenda 8139D VIA Networking Velocity-Family Gb Ethernet Adapter INTEL PRO 1000 的新系列10多种. INTEL PRO 100 的新系列6种. RADTEK RTK8189C Based Fast Ethernet Card Marvell Yukon PCI 添加了10多种型号. 以及修正 VIA Rhine 系列网卡存在的问题。 更新了一些旧版本中驱动中存在的问题,所有驱动更新为最新版本的DOS驱动. Nforce 4系列可能有个别主板不兼容,问过官方得到的答案是由于主板厂商为节省材料使 用了软芯片造成,这一般发生在杂牌主板上. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MaxDOS 5.6s 安装启动后有如下七个选项: 选项A. MaxDOS工具集+Packet网卡驱动网刻 解: MaxDos 的所有工具,包括PACKET的DOS驱动都在些选项.进入后全中文界面,以及全自动 加载网卡驱动.可以选择全盘或单分区刻隆.就不再多加解释了,进入后都懂. PACKET网卡共支持以下几种网卡: 3C905PKT.com 3Com EtherLink PCI Bus Master Packet Driver (3COM 905) 3C90XPD.COM 3Com Fast EtherLink XL 10/100Mb TX Ethernet NIC (3C90X) E310.COM Adico AE310-TX PCI 10/100 Fast Ethernet Adapter AMDPCNET.com AMD PCnet Family DCN530tx.COM DCN-530TX PCI Ethernet Adapter V1.00 (2002.0411) DFE530TX.COM D-Link DLE-530TX PCI NIC (Rev B) V2.53 (2000.0525) DLE530TX.COM D-Link DFE-530TX PCI NIC V4.10 (2002.0703) IP100PD.COM IC Plus IP100 based Fast Ether Adapter V3.03 (2003.0411) PRO100.COM Intel EtherExpress(tm) PRO/10 & PRO/100B PCI,(已更新,可用) RTL8029.COM Realtek RTL8029(AS) PCI Ethernet NIC 1998 RTL8139.COM Realtek RTL8139 Family PCI Fast Ethernet NIC v3.40 SIS900.EXE SiS 900/7016 PCI Fast Ethernet Adapter V1.15 (2002.0816) VIA.COM VIA Rhine I/II Family Fast Ether Adapter V4.16 (已更新,可用) NV.EXE GHOST自带的万能PACKET驱动,如果您有的网卡不能驱动,请尝试此驱动 有人提过此驱动,可驱动NF系列的网卡,如果选项3不成功,可尝试此驱动,见下面的命令行. 5.6S版本网刻服务器的IP应为: 10.1.1.1 奄码为: 255.0.0.0 GHOSTSRV会话名称:max 客户端谁进去都懂的用了因为都是全中文菜单模式,在这里就不再介绍,以下为旧版模式. 友情提醒:您也可以使用新版的网刻模式和旧版网刻模式结合,实现两批机器一起网刻. 关于旧版本的网刻模式,依然是存在的.5.5S或更早旧版本里命令行模式PKT驱动网刻说 明:先将要做为网刻服务端的IP地址改为:192.168.5.100 子奄码为:255.255.255.0 其它网关和DNS的可以都去掉,也可随意保留.然后打开GHOSTSRV服务端,把GHOSTSRV里面的 会话名称改为:max (如果您没有GHOSTSRV,请到我们的网站中下载 Http://Bbs.Pzz.Cn) 一定要是max,否则客户机会连不上, 为什么要用192.168.5.100的IP呢,因为有人说如果 IP网段跟内网机器使用的网段不同的话,可以加快网刻速度,所以故意将服务器IP指为, 192.168.5.100 以隔开别的网段!当然没有实际证明. 5.5S或更早的版本客户机上设置如下,例 VIA 网卡用户请使用格式: VIAGO 45 (VIAGO为自动批处理文件,45为您要设置的客户机IP的最后一位数,前面的192.168.5不用 输入的,输入为自后自动激活网卡,及IP奄码配置文件,自动生成IP地址为 192.168.5.45 子奄码为:255.255.255.0 网关:192.168.5.100),详细请见下表各网卡的批处理. 以下为5.5S版本或更旧的版本,全盘网刻例子: NV 网卡,自动网刻命令格式如后----> NVGO X (X为客户机IP,不准从复) 3C90X 网卡,自动网刻命令格式如后----> 3C90XGO X (X为客户机IP,不准从复) DCN530TX 网卡,自动网刻命令格式如后----> DCN530GO X (X为客户机IP,不准从复) DFE530TX 网卡,自动网刻命令格式如后----> DFE530GO X (X为客户机IP,不准从复) DLE530TX 网卡,自动网刻命令格式如后----> DLE530GO x (X为客户机IP,不准从复) IP 100 网卡,自动网刻命令格式如后----> IP100GO X (X为客户机IP,不准从复) PRO100 网卡,自动网刻命令格式如后----> PRO100GO x (X为客户机IP,不准从复) RTL8029 网卡,自动网刻命令格式如后----> 8029GO X (X为客户机IP,不准从复) RTL8139 网卡,自动网刻命令格式如后----> 8139GO X (X为客户机IP,不准从复) SIS900 网卡,自动网刻命令格式如后----> SIS900GO X (X为客户机IP,不准从复) VIA 网卡,自动网刻命令格式如后----> VIAGO X (X为客户机IP,不准从复) 以下为5.5S版本或更旧的版本,单盘网刻例子: NV 网卡,单分区网刻命令格式如后----> NVGX X (X为客户机IP,不准从复) 3C90X 网卡,单分区网刻命令格式如后----> 3C90XGX X (X为客户机IP,不准从复) DCN530TX 网卡,单分区网刻命令格式如后----> DCN530GX X (X为客户机IP,不准从复) DFE530TX 网卡,单分区网刻命令格式如后----> DFE530GX X (X为客户机IP,不准从复) DLE530TX 网卡,单分区网刻命令格式如后----> DLE530GX X (X为客户机IP,不准从复) IP 100 网卡,单分区网刻命令格式如后----> IP100GX X (X为客户机IP,不准从复) PRO100 网卡,单分区网刻命令格式如后----> PRO100GX X (X为客户机IP,不准从复) RTL8029 网卡,单分区网刻命令格式如后----> 8029GX X (X为客户机IP,不准从复) RTL8139 网卡,单分区网刻命令格式如后----> 8139GX X (X为客户机IP,不准从复) SIS900 网卡,单分区网刻命令格式如后----> SIS900GX X (X为客户机IP,不准从复) VIA  网卡,单分区网刻命令格式如后----> VIAGX X (X为客户机IP,不准从复) 注意,前一个X不代表任何意义,后一个X才代表IP的最后一组数字. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. 使用NDIS2网卡驱动全自动网刻 5.6S版本网刻服务器的IP应为: 10.1.1.1 奄码为: 255.0.0.0 GHOSTSRV会话名称:max 客户端谁进去都懂的用了因为都是全中文菜单模式,在这里就不再介绍,以下为旧版模式. 友情提醒:您也可以使用新版的网刻模式和旧版网刻模式结合,实现两批机器一起网刻. 关于旧版本的网刻模式,依然是存在的.5.5S或更早旧版本里命令行模式NDIS2驱动网刻, 选择此选项后,默认的会自动加载好您本机的网卡驱动,您可以使用NDISGO X (后面的X代 表您的IP最后一组数字,如: 192.168.5.123 只需输入 NDISGO 123 ) 来实现全盘网刻,因为启动此选项后已经自动加载好网卡驱动,本机的驱动都已经打完,不 管任何网卡都只要输入NDISGO X 来实现全盘刻,和NDISGX X来实现单分区刻即可(当然首 先还是要准备好服务器的情况下的,服务器IP设为:192.168.5.100,子奄码:255.255.255.0 其它不用设,安全起见最好从起一下服务端,然后打开GHOSTSRV,把里面的会话名称设为:max 一定要设为max才可连上),使用NDIS网刻时,无须再像PKT那样输入8139GO,DFE530GO等,不管 任何网卡全盘刻只要输入NDISOGO x (x为客户机的IP最后一位,如 192.168.5.1 只须输入 NDISGO 1 而不是 NDISGO 192.168.5.1 且不能使用 100和超过 255的后面IP)如果您的PKT 驱动不能网刻或没有驱动的话,可以试试用NDIS驱动来网刻! NDIS2驱动支持的网卡所有系列如下: 3Com EtherLink PCI TPO NIC (3C900-TPO) 3Com EtherLink PCI Combo NIC (3C900-COMBO) 3Com EtherLink PCI TPO NIC (3C900B-TPO) 3Com EtherLink PCI Combo NIC (3C900B-COMBO) 3Com EtherLink PCI TPC NIC (3C900B-TPC) 3Com EtherLink PCI Fiber NIC (3C900B-FL) 3Com EtherLink 10/100 PCI NIC (3C905-TX) 3Com EtherLink 10/100 PCI T4 NIC (3C905-T4) 3Com 3C918 Integrated Controller (3C905B-TX Compatible) 3Com EtherLink 10/100 PCI Combo NIC (3C905B-COMBO) 3Com EtherLink 100 PCI Fiber NIC (3C905B-FX) 3Com 3C920 Integrated Controller (3C905C-TX Compatible) 3Com 3C920B-EMB Integrated Fast Ethernet Controller 3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller 3Com Gigabit NIC (3C940/3C2000) ADMtek AN983 10/100Mbps Fast Ethernet Adapter ADMtek AN983 based Ethernet Adapter ADMtek AN985 10/100Mbps Fast Ethernet Adapter ADMtek ADM9511 10/100Mbps Fast Ethernet Adapter ADMtek ADM9513 10/100Mbps Fast Ethernet Adapter AMD PCNet Family Ethernet Adapter Broadcom 440x 10/100 Integrated Controller Broadcom 440x 10/100 Integrated Controller Broadcom NetXtreme Gigabit Ethernet Controller Broadcom 570x 10/100 Integrated Controller Broadcom NetLink (TM) Gigabit Ethernet Controller Broadcom NetXtreme Gigabit Fiber Broadcom NetXtreme Gigabit Ethernet Controller Broadcom NetXtreme Fast Ethernet Controller DAVICOM DM9 Series PCI Fast Ethernet Adapter DEC Digital Semiconductor 21040 Ethernet Controller DEC Digital Semiconductor 21140 Ethernet Controller DEC Digital Semiconductor 21041 Ethernet Controller DEC Digital Semiconductor 21143/2 Ethernet Controller DigitalChina DCN-530TX Fast Ethernet Adapter D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.A) D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.D) D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.B/A) D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C) IC Plus IP100 based Fast Ethernet Adapter Intel PRO/100 Mobile Adapters Intel PRO/100 VE Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VM Network Connection Intel 82562EH based Phoneline Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 M Mobile Connection Intel PRO/100 VE Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VM Network Connection Intel PRO/100 VE Network Connection Intel PRO/100 VE Network Connection Intel 82559ER Fast Ethernet Controller Intel PRO/100+ PCI Adapter Intel PRO/100 Network Connection Intel 82562 based Fast Ethernet Connection Intel 82562 based Fast Ethernet Connection Intel PRO/1000 Gigabit Server Adapter Intel PRO/1000 F Server Adapter Intel PRO/1000 T Server Adapter Intel PRO/1000 XT Network Connection Intel PRO/1000 XF Network Connection Intel PRO/1000 T Network Connection Intel PRO/1000 XT Network Connection Intel PRO/1000 MT Network Connection Intel PRO/1000 MT Network Connection Intel PRO/1000 MT Dual Port Network Connection Intel PRO/1000 MF Server Adapter Intel PRO/1000 MF Dual Port Network Connection Intel PRO/1000 MT Network Connection Intel PRO/1000 MT Mobile Connection Intel PRO/1000 MT Mobile Connection Intel PRO/1000 MT Mobile Connection Intel PRO/1000 CT Network Connection Intel PRO/1000 MT Quad Port Network Connection Intel PRO/1000 MT Mobile Connection Intel PRO/1000 MT Server Connection Intel PRO/1000 MF Server Adapter Intel PRO/1000 MB Server Connection Intel PRO/1000 PT Dual Port Network Connection Intel(R) PRO/1000 PF Dual Port Server Adapter Intel(R) PRO/1000 PB Dual Port Server Connection Intel PRO/1000 CT Network Connection Intel PRO/1000 MT Network Connection Intel PRO/1000 MT Mobile Connection Intel PRO/1000 MT Dual Port Network Connection Intel PRO/1000 MF Dual Port Network Connection Intel PRO/1000 MB Dual Port Server Connection Intel PRO/1000 GT Desktop Adapter Intel(R) PRO/1000 PT Server Adapter Intel(R) PRO/1000 PF Server Adapter Intel(R) PRO/1000 PB Server Connection Intel(R) PRO/1000 PM Network Connection Intel(R) PRO/1000 P Network Connection Intel(R) PRO/1000 PL Network Connection Marvell Yukon PCI (PCI-E) Gigabit Controller Marvell Yukon 88E8001/8003/8010 PCI Gigabit Controller Marvell Yukon 88E8035 PCI-E Fast Controller Marvell Yukon 88E8036 PCI-E Fast Controller Marvell Yukon PCI (PCI-E) Gigabit Controller Marvell Yukon PCI (PCI-E) Gigabit Controller Marvell Yukon 88E8052 PCI-E ASF Gigabit Controller Marvell Yukon 88E8050 PCI-E ASF Gigabit Controller Marvell Yukon 88E8053 PCI-E Gigabit Controller Marvell Yukon PCI (PCI-E) Gigabit Controller RealTek RTL8029 PCI Ethernet Adapter RealTek RTL8139/810x Family Fast Ethernet Adapter $ Realtek RTL8169/8110 Family Gigabit Ethernet Adapter SiS 900-Based PCI Fast Ethernet Adapter VIA VT86C100A Rhine Fast Ethernet Adapter VIA Rhine III Management Adapter VIA Rhine II Fast Ethernet Adapter VIA Rhine III Fast Ethernet Adapter Legend DFE-530TX PCI Fast Ethernet Adapter (Rev A) Legend DFE-530TX PCI Fast Ethernet Adapter (Rev B/A) ULi PCI Fast Ethernet Controller ULi Electronics Inc. Realtek RTL8136/810x Family Fast Ethernet NIC Realtek RTL8168/8111 PCI-E Gigabit Ethernet NIC D-Link DFE-550TX FAST Ethernet 10/100 Adapter Sundance ST201 based Adapter NT Driver D-Link DGE-530T Gigabit Ethernet Adapter VIA Networking Velocity-Family Gb Ethernet Adapter RADTEK RTK8189C Based Fast Ethernet Card 支持200多种网卡,还有很多没列出,如果您不知道网卡型号,可尝试使用此项. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C. nForce 1/2/3/4网卡驱动网刻 nForce MCPx 系列网卡网络刻隆项.由于NF驱动的驱动占用了太大内存,造成无法加载 中文程序,只能使用旧版的NDISGO XX 和 NDISGX XX 命令网刻. NDISGO为全盘网刻命令,后面的XX可以是 1-99和101-254 不得重复. NDISGX为单分网刻命令,后面的XX可以是 1-99和101-254 不得重复.前面的X不作任何代表. 请先将服务端IP设为:192.168.5.100 奄码: 255.255.255.0 GHOSTSRV会话名: max NFORCE的网卡需要同时加载两个网卡驱动文件,无法在自动加载中加载,只能另行加载! 如果您使用此选项存在问题,请尝试使用选项A的GHOST自带万能驱动. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 选项D. DOS下访问局域网共享资源 进入此项后,系统会自动帮您加载好网卡驱动,并且设置好连接的协议,而且是全中文菜单, 您可以在进入此项后,直接获得局域网里WINDOWS主机上的共享资源,而且支持读写操作当然 这前提您要开启权限.才能实现写操作,您可以根据菜单里的提示操作,也可以使用如NT主机 上的NET命令来实现连接到共享目录,命令行如: net use z: \\max\f 此命令的意思是将Z: 盘,映射到"Max"主机上的"f"为名称的共享目录.您可以参考NT的NET命 令在NT主机上使用 NET /? 或 NET USE /? 获得帮助,当然可能有个别命令不支持. 此选项还包含了 EMM386驱动程序,如果您有特别要求需要用到 EMM386时,可以使用此选项. 友情提醒:您只能通过机器名称来连接您的主机,而不能使用IP地址来连接您的主机.而且您 还能使用此项进行网刻操作,映射好如Z:盘 ,然后在GHOST中选择Z:盘共享目录中的".GHO" 镜像还原或备份进去. 注意:您要访问的机器的工作组必须是: workgroup 而且您被访问的机器必须安装IPX协议 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 选项E. 还原D:\bak\sys.gho镜像 自动还原 D:\BAK\SYS.GHO 到C盘中!方便自动恢复! &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 选项F. 驱动USB设备 用来驱动U盘.USB硬盘.USB光驱,驱动后就可以在DOS下访问U盘和USB硬盘的内容了! &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 选项G. 纯DOS模式 用于刷BIOS或运行其它特殊软件.不加载任何东西,无虚拟盘. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MAXDOS内置的命令及工具说明: 12.BAT 将第一硬盘GHOST到第二硬盘,注意确认好哪个是第一和第二硬盘哦 21.BAT 将第二硬盘GHOST到第一硬盘,注意确认好哪个是第一和第二硬盘哦 ACOPY.COM 能够完全复制文件和目录,包括它们的长文件名和属性. CHOICE.COM 选择命令,返回按键的ERRORLEVEL值. CLOSE.COM 关闭CD-ROM. Coms.com 一个清除CMOS密码和设置的程序. Mouse.bat 可以直接加载鼠标,以及DOS下使用剪切板程序. CTMOUSE.EXE CuteMouse 1.9版,DOS下最好最实用的鼠标驱动程序. MOUSCLIP.EXE DOS下(包括命令行下)用鼠标复制/粘帖及模拟方向键的工具 DELTREE.COM 删除目录和文件的工具. DEVICE.COM 用命令行模式加载 .SYS 驱动. Diskgen.exe 强大的DOS下中文分区软件.一直用它.Max强烈推荐,强过DM. DREADY.COM 判断驱动器状态,检查光驱中是否有光盘、软盘是否写保护. EXLAN.bat 如果要手动网刻的话.请运行这个解压出DOS的网卡驱. FIND.COM 查找工具的最好的替代程序. FINDCD.EXE 实用的查找光驱盘符的程序. ghost.exe GHOST 8.3 版,如果运行了NTFSDOS.请用Qntfs退出后再运行. IO.SYS MS-DOS 7.10系统内核引导文件.IO输入输出. LABEL.COM 非常小巧的修改磁盘卷标的工具 off.COM 关闭计算机用的..呵呵.. OPEN.COM 打开光驱哦.运行一下光驱自动打开. password.bat DOS下清除2K/XP/2K3的用户密码.支持NTFS/FAT32分区.MAX强烈推荐 PCTOOL.EXE DOS下的类似于WIN资源管理器 pkzip.COM 解压压缩包ZIP用. RANDOM.COM 自动生成字符的东西.可以用来自动分配IP. readme.txt 呵呵.我在这呢. MaxDOS Http://Pzz.Cn r.com 运行一下就知道效果啦,呵呵.重启动计算机用的. SHSUCD1.COM LOADISO用的虚拟光驱驱动. SHSUCDHD.EXE 忘了什么东西啦.呵呵.等下试试. SHSUCDX.EXE 最NB的DOS光驱驱动程序. SPFDISK.BAT 启动管理器+分区管理器,功能强大 TW.BAT 天汇中文系统,支持五笔.拼音.区位.双拼输入法.用QUIT退出! twx.zip 天汇的主程序较大.压缩在这里面了. W.BAT WAIT配置文件. WAIT.COM 用于批处理文件的等待工具,且支持键盘返回值等操作 wbat.com DOS下强大的批处理菜单生成器. Xcopy.EXE 强大的复制程序,可复制带文件夹的目录,加载tw后,使用Xcopy /? XMSDSK.EXE 最好的虚拟内存盘工具,非常方便实用,且只占很少的内存 XDEL.EXE 类似于WIN2K下的RD,可删除目录和子目录里文件. MEM.EXE DOS查看内存占用情况. ADDEV.COM DOS命令行下加载.SYS驱动. ATTRIB.COM 文件/文件夹属性设置命令. DEBUG.EXE 强大的DOS下编程命令. DELDEV.COM 卸载用ADDEV添加的.SYS驱动. EDIT.COM 相当于记事本. FAKEDISK.COM 用来解压.IMG镜像 FDISK.EXE 分区命令 FORMAT.COM 格式化命令 SMARTDRV.EXE DOS下磁盘缓存程序.加载一下可大提高DOS安装系统. SYS.COM 传输MSDOS 7.01 的引导文件到C盘.使用C盘可以引导到DOS. TREE.COM 显示排序命令. Ndisgo 用于旧版本的命令行模式全盘网刻,格式: NDISGO xx Ndisgx 用于旧版本的命令行模式单分区网刻,格式: NDISGX xx AutoGO.bat 5.6版NDIS2驱动的自动网刻菜单.请在选项了引导的第二项时使用. Menu.bat 5.6版选项第一项引导的主菜单,包含PKT驱动网刻及一键恢复备份. Mhdd.bat Mhdd 4.6 强大的磁盘扫描修复程序.强于效率源. NTFSDOS.BAT 新版本的NTFS分区访问程序,支持读写NTFS/EX2/EX3等分区. Qntfs.bat 用于退出NTFSDOS读写分区长驻内存. Quit.exe 用于退出天汇汉字系统,也可以使用 tway /q退出! Hddreg.bat HDDREG 1.51版 俄罗斯出品的硬盘检测程序. LOADISO.BAT DOS下载入ISO光盘镜像.只能读取.不能引导.但可装2K/XP/2K3系统 先切换到存放ISO的目录.输入 loadiso xx.iso (xx为镜像文件名) 3C90Xgo.bat 3C90X系列自动全盘网刻批处理. 3C90XgX.BAT 3C90X系列自动单分区网刻批处理. 8029go.bat 8029系列自动全盘网刻批处理. 8029gX.BAT 8029系列自动单分区网刻批处理. 8139go.bat 8139系列自动全盘网刻批处理. 8139gX.BAT 8139系列自动单分区网刻批处理. viaGO.bat VIA Rhine I/II系列自动全盘网刻批处理. viaGX.BAT VIA Rhine I/II系列自动单分区网刻批处理. DCN530go.bat DCN-530TX系列自动全盘网刻批处理. DCN530gX.BAT DCN-530TX系列自动单分区网刻批处理. DFE530go.bat D-Link DFE-530TX系列自动全盘网刻批处理. DFE530gX.BAT D-Link DFE-530TX系列自动单分区网刻批处理. DLE530go.bat DLE530系列自动全盘网刻批处理. DLE530gX.BAT DLE530系列自动单分区网刻批处理. ip100GO.bat IC Plus ip100系列自动全盘网刻批处理. ip100GX.BAT IC Plus ip100系列自动单分区网刻批处理. pro100go.bat pro100系列自动全盘网刻批处理. pro100gX.BAT pro100系列自动单分区网刻批处理. sis900go.bat sis900系列自动全盘网刻批处理. sis900gX.BAT sis900系列自动单分区网刻批处理. 可能还有个别命令未写上,还需您去挖掘. 关于IELDR由于限制较大,支持性不好,已经在本版中去掉了,请见谅. :) 如果您在使用中遇到问题请上我们的论坛 http://bbs.pzz.cn/thread-htm-fid-8.html 在此感谢网盟中的: Sense 感谢网友: Renda@somewhere 和 lihongqing 感谢所有支持过我们网站会员,和论坛里的所有会员及支持我们的同撩们. 祝您使用愉快 :) 卸载本软件,请在 "控制面板->添加删程序->找到MAXDOS点删除! 本站下载 Http://www1.Pzz.Cn/Soft/MaxDOS56S.RAR 附送服务端 GHOSTSRV 8.3 http://up.pzz.cn/userfiles/max/Ghost83.rar 自动删除LOG文件程序.
摘自:http://mbstudio.spaces.live.com/blog/cns!C898C3C40396DC11!955.entry 2007/1/30 oSIP协议栈(及eXoSIP,Ortp等)使用入门(原创更新中) (CopyLeft by Meineson | www.mbstudio.cn,原创文章,欢迎转载,但请保留出处说明!) 本文档最新版本及文中提到的相关源码及VC6工程文件请在本站找,嘿嘿~~ (首页的SkyDriver公开文件夹中,可能需要用代理才能正常访问该空间——空间绝对稳定,不会丢失文件!) (最近工作重心不在SIP开发,SO本文档也没有机会更新,有技术问题也请尽量咨询他人,本人不一定能及时回复。)   一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本,看到网上的许多帮助说明手册都过于陈旧,且很多文档内容有点误人子弟的嫌疑~~   Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下的使用作出描述。   虽然oSIP的开发人员也说明了,oSIP只使用了标准C开发库,但许多人在Windows下使用oSIP时,第一步就被卡住了,得不到oSIP的LIB库和DLL库,也就没有办法将oSIP使用到自己的程序中去,所以第一步,我们将学习如何得到oSIP的静态和动态链接库,以便我们自己的程序能够使用它们来成功编译和执行我们的程序。 第一阶段: ------------------------------------------------------   先创建新工程,网上许多文档都介绍创建一个Win32动态链接库工程,我们这里也一样,创建一个空白的工程保存。   同样,将oSIP2版本3.0.1 src目录下的Osipparser2目录下的所有文件都拷到我们刚创建的工程的根目录下,在VC6上操作: Project-Add To Project-Files   将所有的源程序和头文件都加入到工程内,保存工程。   这时,我们可以尝试编译一下工程,你会得到许多错误提示信息,其内容无非是找不到osipparser2/xxxxx.h头文件之类。   处理:在Linux下,我们一般是将头文件,lib库都拷到/usr/inclue;/usr/lib之类的目录下,c源程序里直接写#include 时,能直接去找到它们,在VC里,同样的,最简单的方法就是将oSIP2源码包中的Include目录下的 osipparser2目录直接拷到我们的Windows下默认包含目录即可,这个目录在VC6的Tool-Options-Directories里设置,(当然,如果你知道这一步,也可以不用拷贝文件,直接在这里把oSIP源码包所在目录加进来就可以了),默认如果装在C盘,目录则为 C:\Program Files\Microsoft Visual Studio\VC98\Include。   这时,我们再次编译我们的工程,顺利编译,生成osipparser2.dll,这时,网上很多文档里可能直接就说,这一步也会生成libs目录,里面里osipparser2.lib文件,但我们这里没有生成:)   最简单的方法,不用深究,直接再创建一个工程,同上述创建动态链接库方法,创建一个Win32静态链接库工程,直接编译,即可得到osipparser2.lib。 ------------------------------------------------------   上面,我们得到了Osip的解析器开发库,下面再编译完整的Osip协议栈开发库,同样照上述方法,分别创建动态链接库工程和静态链接库工程,只是要拷的文件换成src下的osip目录下文件和include下的osip目录,得到osip2.dll和osip2.lib。   在编译osip2.dll这一步可能会再次得到错误,内容含义是找不到链接库,所以,我们要把前面编译得到的osipparser2.lib也拷到osip工程目录下,并在VC6中操作:   Project-Setting-Link中的Object/Library Modules: kernel32.lib user32.lib ... xxx.lib之类的内容最后增加: osipparser2.lib   保存工程后再次编译,即可成功编译osip2.dll。 ------------------------------------------------------   至此,我们得到了完整的oSIP开发库,使用时,只需在我们的程序里包含oSIP的头文件,工程的链接参数里增加osipparser2.lib和osip2.lib即可。 ------------------------------------------------------   下面我们验证一下我们得到的开发库,并大概了解一下OSIP的语法规范。   在VC里创建win32控制台程序工程,将libosip源码包的SRC目录下的Test目录内的C源程序随便拷一个到工程时,直接编译(工程设置里照前文方法在link选项里增加osip2.lib,osipparser2.lib引用我们之前成功编译得到的静态库文件)就可以运行(带参数运行,参数一般为一个文本文件,同样从Test目录的res目录里拷一个与源文件同名的纯文本文件到工程目录下即可)。   该目录下的若干文件基本上是测试了Osip的一些基本功能函数,例如URI解析之类,可以大概了解一下oSIP的语法规范和调用方法,同时也能校验一下之前编译的OSIP开发库能否正常使用,成功完成本项工作后,可以进入下一步具体的oSIP的使用学习了。 ------------------------------------------------------   由于oSIP是比较底层的SIP协议栈实现,新手较难上手,而官方的示例大都是一些伪代码,需要有实际的例子程序参考学习,而最好的例子就是同样官方发布的oSIP的扩展开发库exosip2,使用exoSIP可以很方便地快速创建一个完整的SIP程序(只针对性地适用于SIP终端开发用,所以我们这里只是用它快速开发一个SIP终端,用来更方便地学习oSIP,要想真正掌握SIP的开发,需要掌握oSIP并熟读RFC文档才行,exoSIP不是我们的最终学习目的),通过成功编译运行一个自己动手开发出的程序,再由浅入深应该是初学都最好的学习方法通过对使用exosip开发库的使用创建自己的SIP程序,熟悉后再一个函数一个函数地深入学习exosip提供的接口函数,就可以深入理解osip 了,达到间接学习oSIP的目的,同时也能从eXoSIP中学习到正确使用oSIP的良好的编程风格和语法格式。   而要成功编译ExoSIP,似乎许多人被难住了,直接在XP-sp2上,用VC6,虽然你使用了eXoSIP推荐的winsock2.h,但是会得到一个 sockaddr_storage结构不能识别的错误,因为vc6自带的开发库太古董了,需要升级系统的Platform SDK,下载地址如下: http://www.microsoft.com/msdownl ... PSP2FULLInstall.htm(VC6的支持已经停止,这是VC6能使用的最新SDK)   成功安装后编译前需加OSIP_MT宏,以启用线程库,否则在程序中使用eXoSIP库时会出错,而编译时也会得到许多函数未定义的Warning提示,编译得到exosip2.lib供我们使用,当然,在此之前需要成功编译了osip2和osipparser2,而在之后的实际使用时,发现oSIP也需要增加OSIP_MT宏,否则OSIP_MT调用oSIP的线程库时会出错,所以我们需要重新编译oSIP了:),因为eXosip是基于oSIP的(同上方式创建静态和动态链接库工程,并需在Link中手工添加oSIP和oSIPparser的lib库)。 ------------------------------------------------------   创建新工程,可以是任意工程,我们从最简单的Win32控制台程序开始,为了成功使用oSIP,我们需要引用相关库,调用相关头文件,经过多次试验,发现需要引用如下的库: exosip2.lib osip2.lib osipparser2.lib WSock32.Lib IPHlpApi.Lib WS2_32.Lib Dnsapi.lib   其中,除了我们上面编译得到的三个oSIP库外,其它库都是系统库,其中有一些是新安装的Platform SDK所新提供的。   至此,我们有了一个简单的开发环境了,可以充分利用网上大量的以oSIP为基础的代码片段和官方说明文档开始具体函数功能的测试和使用了:) ------------------------------------------------------   我们先进行一个简单的纯SIP信令(不带语音连接建立)的UAC的SIP终端的程序开发的试验(即一个只能作为主叫不能作为被叫的的SIP软电话模型),我们创建一个MFC应用程序,对话框模式,照上面的说明设置工程包含我们上面得到的oSIP的相关开发库及SDK的一些开发库,并且由于默认LIBC的冲突,需要排除MSVCRT[D]开发库(其中D代表Debug模式下,没有D表示Release模式下),直接使用eXosip的几个主要函数就可以创建一个基本的SIP软电话模型。   其主要流程为:   初始化eXosip库-启动事件监听线程-向SIP Proxy注册-向某SIP终端(电话号码)发起呼叫-建立连接-结束连接   初始化代码: int ret = 0; ret = eXosip_init (); eXosip_set_user_agent("##YouToo0.1"); if(0 != ret) { AfxMessageBox("Couldn't initialize eXosip!\n"); return false; } ret = eXosip_listen_addr (IPPROTO_UDP, NULL, 0, AF_INET, 0); if(0 != ret) { eXosip_quit (); AfxMessageBox("Couldn't initialize transport layer!\n"); return false; }   启动事件监听线程: AfxBeginThread(sip_uac,(void *)this);   向SIP Proxy注册: eXosip_clear_authentication_info(); eXosip_add_authentication_info(uname, uname, upwd, "md5", NULL); real_send_register(30);  /* 自定义函数代码请见源码 */   发起呼叫(构建假的SDP描述,实际软电话使用它构建RTP媒体连接): osip_message_t *invite = NULL; /* 呼叫发起消息体 */ int i = eXosip_call_build_initial_invite (&invite, dest_call, source_call, NULL, "## YouToo test demo!"); if (i != 0) { AfxMessageBox("Intial INVITE failed!\n"); } char localip[128]; eXosip_guess_localip (AF_INET, localip, 128); snprintf (tmp, 4096, "v=0\r\n" "o=josua 0 0 IN IP4 %s\r\n" "s=conversation\r\n" "c=IN IP4 %s\r\n" "t=0 0\r\n" "m=audio %s RTP/AVP 0 8 101\r\n" "a=rtpmap:0 PCMU/8000\r\n" "a=rtpmap:8 PCMA/8000\r\n" "a=rtpmap:101 telephone-event/8000\r\n" "a=fmtp:101 0-11\r\n", localip, localip, "9900"); osip_message_set_body (invite, tmp, strlen(tmp)); osip_message_set_content_type (invite, "application/sdp"); eXosip_lock (); i = eXosip_call_send_initial_invite (invite); eXosip_unlock ();   挂断或取消通话: int ret; ret = eXosip_call_terminate(call_id, dialog_id); if(0 != ret) { AfxMessageBox("hangup/terminate Failed!"); }   可以看到非常简单,再借助于oRTP和Mediastreamer开发库,来快速为我们的SIP软电话增加RTP和与系统语音API接口交互及语音编码功能,即可以快速开发出一个可用的SIP软电话,关于oRTP和Mediastreamer的相关介绍不是本文重点,将在有空的时候考虑增加相应使用教程,文章前提到的地方可以下载基本可用的完整SIP软电话的VC源码工程文件供参考使用,完全CopyLeft,欢迎转载,但请在转载时注明作者信息,谢谢! 第二阶段: ---------------------------------------------------   得到了一个SIP软电话模型后,我们可以根据软电话的实际运行表现(结合用Ethereal抓包分析)来进行代码的分析,以达到利用eXoSIP来辅助我们学习oSIP的最终目的(如要快速开发一个可用的SIP软电话,请至前面提到的论坛去下载使用oRTP和Mediastreamer快速搭建的一个基本完整可用的SIP软电话##YouToo 0.1版本的VC源码工程文件作参考)。   现在从eXosip的初始化函数开始入手,来分析oSIP的使用,这是第二阶段,第三阶段就是深入学习oSIP的源码了,但大多数情况下应该没有必要了,因为在第二阶段就有部分涉及到第三阶段的工作了,而且oSIP的源码也就大多是一些SIP数据的语法解析和状态机的实现,能深入理解了SIP协议后,这些只是一种实现方式,没必要完全去接受,而是可以用自己的方式和风格来实现一套,比如,更轻量化更有适用目的性的方式,oSIP则只起参考作用了。   eXosip_init()是eXosip的初始化函数,我们来看看它的内部实现:   首行是定义的 osip_t *osip,这在oSIP的官方手册里我们看到,所有使用oSIP的程序都要在最开始处声明一个osip_t的指针,并使用 osip_init(&osip)来初始化这个指针,销毁这个资源使用osip_release(osip)即可。   我们可以在代码中看到很多OSIP_TRACE,这是调试输出宏调用了函数osip_trace,可以用ENABLE_TRACE宏来打开调试以方便我们开发调试。   其它就是很多的eXosip_t的全局变量eXosip的一些初始化操作,包括最上面的memset (&eXosip, 0, sizeof (eXosip))完全清空和下面的类似eXosip.user_agent = osip_strdup ("eXosip/" EXOSIP_VERSION)的exosip变量的一些初始值设置,其中有一个eXosip.j_stop_ua = 0应该是一个状态机开关,后面可以看到很多代码检测这个变量来决定是否继续流程处理,默认置成了0表示现在exosip的处理流程是就绪的,即ua是 not stop的。      osip_set_application_context (osip, &eXosip)是比较有意思的,它让下面的eXosip_set_callbacks (osip)给osip设置大量的回调函数时,能让osip能访问到eXosip这个全局变量中设置的大量程序运行时交互的信息,相当于我们在VC下开启一个线程时,给线程传入的一个void指针指向我们的MFC应用程序的当前dialog对象实例,可以用void *osip_get_application_context (osip_t * osip)这个函数来取出指针来使用,不过好象exosip中并没有用到它,可能是留给个人自已扩展的吧:)      还能看到初始化代码前面有一段WIN32平台下的SOCK的初始化代码,可以知道eXosip是用的原生的winsock api函数,也就是我们可能以前学过的用VC和WINAPI写sock程序时(不是MFC),用到的那段SOCK初始代码,还有一段有意思的代码,就是 jpipe()函数,它们返回的是一个管道,一个有2个整型数值的数组(一个进一个出),查看其代码发现,非WIN32平台是直接使用的pipe系统函数,而WIN32下则是用一对TCP的本地SOCK连接来模拟的管道,一个SOCK写一个SOCK读,这段代码是比较有参考价值的:) j = 50; while (aport++ && j-- > 0) {   raddr.sin_port = htons ((short) aport);   if (bind (s, (struct sockaddr *) &raddr, sizeof (raddr)) transactionid)); }   即,只是打印一下调试,并没有完整实现什么功能,我们学习时,完全可以用相同的方法,定义一大堆回调函数,并不忙想怎么完全实现,先都是只打印一下调试信息,看具体的应用逻辑根据抓包测试分析和看调试看程序走到了哪一步,调用了哪一个回调,来明白具体回调函数要实现什么用途,再来实现代码就方便多了,当然,如果看透了RFC文档,应该从字面就能知道各个回调函数的用途了,这是后话,不是谁都能快速完全看懂RFC的,所以我们要参考eXosip:)      我们对其中的重要的回调函数进行逐个的分析:   ---------------------------   osip_set_cb_send_message (osip, &cb_snd_message) SIP消息发送回调函数   这个函数可能是最重要的回调函数之一,消息发送,包括请求消息和回应消息,一般情况下,状态机的状态就是由它控制的,发起一个消息初始化一个状态机,回应一个消息对状态机修改,终结消息发送结束状态机……   看cb_snd_message的函数实现,要以发现,其主要代码是对参数中的要发送的消息osip_message_t * sip进行分析,找出消息要发送的真实char *host,int port的值(这些参数可以省略,但要发送消息肯定需要host和port,所以要从sip中解析),最后根据sip中解析出的传输方式是TCP还是 UDP选择最终进行消息发送处理的函数cb_udp_snd_message,cb_tcp_snd_message处理(它们的参数一致,即本函数只是补全一些省略的参数并对消息进行合法性检查)。   **毕竟eXosip是一个通用的开发库,它考虑了要支持TCP,UDP,TCPs,IPV4,IPV6,WIN32,*nix,WINCE等等多样化的复杂环境,所以,我们可以略过我们暂时不需要的部分,比如,IPV6相关的代码实现等。      由于我们大多数情况下SIP是用的UDP,所以先来看一下cb_udp_snd_message的实现,它从全局变量exosip中获取可用的 sock,并尽最大能力解析出host和port(??难道前面的函数还不够解析彻底??如最终仍无port信息则默认设置为5060),使用 osip_message_to_str (sip, &message, &length)函数将要发送的格式化的SIP消息转换成能用SOCK传输的简单数据并发送即完成消息发送,代码中有许多复杂的环境探测和错误控制等等等等,我们可以暂时不用过多关注,可以继续向下,结尾处有一个keeplive相关代码,从代码字面分析,可能是SIP的Register消息的自动重发相关代码,可以在后面再细化分析。   cb_tcp_snd_essage的函数实现要比上文的udp的实现简单很多,主要是环境探测错误控制方面,因为毕竟tcp是稳定连接的,对比一下代码,可以看到主要流程还是将SIP消息转换后,发送到从SIP消息中解析出的host和port对应的目标。      看完两个函数,可以知道,eXosip需要有两个sock,是一个数组,0是给UDP用的,1是给TCP用的,要用SOCK当然要初始化,就是下文要介绍的eXosip的网络相关的初始化了,上面的exosip_init可以看成是这个开发库的系统初始化吧:)    至些,我们应该知道了oSIP开发的SIP应用程序的消息是从哪里发出的吧,对了,就是从这个回调函数里,所谓万事开头难,就象开发WIN32应用程序时,找到了WIN32程序的main函数入口下面的工作就好办了,下面就都是为一些事件消息开发对应的处理函数而已了:)   osip_set_kill_transaction_callback 事务终结回调函数   对应ICT,IST,NICT,NIST客户/服务器注册/非注册事务状态机的终结,主要是使用osip_remove_transaction (eXosip.j_osip, tr)将当前tr事务删除,再加上一系列的清理工作,其中,NICT即客户端的非Invite事务的清理比较复杂一些,要处理的内容也比较多,可以根据实际应用的情况进行有必要的清理工作:)   cb_transport_error 传输失败处理回调   对应于上面说到的四种事务状态机,如果它们在处理时失败,则在这时进行统一处理。   从代码可知,只是在NOTIFY,SUBSCRIBE,OPTION操作失败才进行处理,其它错误可直接忽略。   osip_set_message_callback 消息发送处理回调   根据type不同,表示不同的消息发送状态   OSIP_XXX_AGAIN 重发相关消息   OSIP_ICT_INVITE_SENT 发起呼叫   OSIP_ICT_ACK_SENT ACK回应   OSIP_NICT_REGISTER_SENT 发起注册   OSIP_NICT_BYE_SENT BYE发出   OSIP_NICT_CANCEL_SENT Cancel发出   OSIP_NICT_INFO_SENT,OSIP_NICT_OPTIONS_SENT,OSIP_NICT_SUBSCRIBE_SENT,OSIP_NICT_NOTIFY_SENT,OSIP_NICT_UNKNOWN_REQUEST_SENT   我们可以看到,eXosip没有对它们作任何处理,我们可以根据自己需要,比如,重发2xx消息前记录一下日志之类的,扩展一下retransmission的处理方式,发起Invite前记录一下通话日志等等。   OSIP_ICT_STATUS_1XX_RECEIVED uac收到1xx消息,一般是表示对端正在处理中,这时,主要是设置一下事务状态机的状态值,并对会话中的osip的一些参数根据返回值进行相应设置,里面有许多条件判断,但我们常用的一般是100,180,183的判断而已,暂时可以忽略里面复杂的判断代码。   OSIP_ICT_STATUS_2XX_RECEIVED uac收到2xx消息,这里主要跟踪一下Register情况下的2xx,表示注册成功,这时会更新一下exosip的注册字段值,以便让eXosip能自动维护uac的注册,BYE的2xx回应是终结消息,Invite的2xx回应,则主要是初始化一下会话相关的数据,表示已成功建立连接。   其它4xx,5xx,6xx则分别是对应的处理,根据实现情况进行概要的查看即可。   report_event (je, sip)是代码中用来进行事件处理的一个函数,跟踪后发现,其最终是使用了我们上文提到的jpipe管道,以便在状态机外实时观测状态机内的处理信息。      OSIP_NIST_STATUS_XXX_SENT即对应于上面的uac的处理,这里是uas的对应的消息处理,相比较于uac简单一点。   前面简单介绍了一下大量的回调函数及它们的概要处理逻辑,可能会比较混乱,暂时不用管它,只需要记得一个大概的形象,知道一个SIP处理程序是通过osip_set_cb_send_message回调函数来实现真实地发送各种SIP消息,并且SIP的标准事务模型是由oSIP实现好了,我们只需要给不同的事务状态设置不同的回调处理函数来处理事务,具体的状态变化和内部逻辑不用管就可以了。   下面来说一下消息处理回调函数用到的SOCK的初始化函数,即我们上面说的除了系统初始化外的网络初始化函数eXosip_listen_addr:   从上文知道了,系统将初始化两个SOCK,一个UDP一个TCP,但查看代码发现还有第三个,TCPs的,但好象还不能实用,现在不管它,代码首先是根据传输是UDP还是TCP来设置对应的数组值,并且如果没有提供IP地址和端口号,系统会自动取出本机网络接口并创建可用的SOCK(http_port 的方式暂不用考虑)。   SOCK初始化后,如何开始SIP事务的呢?看到这个调用eXosip.j_thread = (void *) osip_thread_create (20000, _eXosip_thread, NULL),对的,这里启用了一个线程,即,eXosip是调用oSIP的线程函数(没用系统提供的线程函数,是为了跨平台)进行事务处理的状态机逻辑是在一个线程中处理的,这样就明白了为什么一直没能看到顺序执行下来的程序启动代码了,接下去看,线程实际处理函数是_eXosip_thread,这里面的代码中,我们看到了上文提到的状态机控制开关变量while (eXosip.j_stop_ua == 0),即,当j_stop_ua设置为1时,osip_thread_exit ()结束事务处理即程序终结,再接下去看,_eXosip_execute是最终的处理函数了,而且它在程序未终结情况下是一直逻辑在执行,注意,要启用oSIP的多线程宏OSIP_MT。      看到_eXosip_execute的代码中有很多时间函数和变量,仔细看,除去一些控制代码,主要处理函数是eXosip_read_message (1, lower_tv.tv_sec, lower_tv.tv_usec),即取出消息,1表示只取出一条消息,其代码量非常的大,但同样的,其中也许多的控制代码和错误检测代码,我们在查看时可以暂时忽略掉它们。   eXosip_read_message读取消息时,即没有采用sock的block也没有用非block方式,而是采用了select方式,具体应用可查询fd_set相关文档。   根据jpipe_read (eXosip.j_socketctl, buf2, 499),我们可以估计,buf2中应该是保存的我们的控制管道的数据,具体作用至些还没有表现出来,应该是用来反映一些状态机内部的警示之类的信息,实际的SIP的处理的状态机的数据是存放在buf中,使用_eXosip_recvfrom获取的,获取后sipevent = osip_parse (buf, i)解析,使用osip_find_transaction_and_add_event (eXosip.j_osip, sipevent)来查询事件对应的事务状态机,找到后就如同其注解所说明的,/* handled by oSIP ! */,即我们上文设置的那一大堆回调函数,至此,我们知道了整个SIP应用所处理的大概流程了。   如果没有找到事务状态机呢?直接丢弃吗?不是的,如果这是一个回应消息,但没有事务状态机处理它,那它是一个错误的,要进行清理后才能丢弃,而如果是一个请求,那更不能丢弃了,因为UAS事务状态机要由它来启动创建的(回应消息表示本地发出了请求消息,即UAC行为,事务状态机应是由启动UAC的代码初始化启动的),整个逻辑应该是很简单的,但eXosip的实现代码却非常多,可见其花了非常多的精力在保证会话的稳定性和应付网络复杂情况上,我们可以对其进行大量的精简来构建满足我们需求的代码实现。   先来看错误的回应消息的处理函数eXosip_process_response_out_of_transaction,可以看到其代码就是一大堆的赋值语句,XXX= NULL,即将一大堆的运行时变量清空,再调用osip_event_free清空事件,或者就是一些复杂的情况下,需要通过解析现在的运行时数据,从中分析出“可能”的正在等待回应的对端,并发送相关终结通知消息等等,可以根据实际需要进行简化。   请求事件的处理 eXosip_process_newrequest,首先是对事件进行探测,MSG_IS_INVITE、MSG_IS_ACK、 MSG_IS_REQUEST……,对事件进行所属状态机分类,随后使用_eXosip_transaction_init (&transaction,(osip_fsm_type_t) tx_type,eXosip.j_osip, evt->sip)根据探测结果进行状态机初始化,实际调用的是osip_transaction_init,初始化后即将事件入状态机 osip_transaction_add_event (transaction, evt),由状态机自动处理后调用相应回调函数处理逻辑了。当然,eXosip为方便快速开发SIP终端应用,在下面又添加了许多自动化的处理代码,来和我们在回调函数中设置的处理代码相区分。   线程调用的事件处理函数代码最后是 if (eXosip.keep_alive > 0) {   _eXosip_keep_alive (); }   这段代码印证了上文提到了,keep_alive是用来设置是否自动重新注册,由_eXosip_keep_alive函数来实现自动将eXosip全局变量中保存的注册消息解析后自动根据需要重新向SIP服务器发起Register注册。   同样,因为注册消息发起是UAC的行为,将它放在这里,可以看出来所有事件消息的事务状态机处理都是在这里,只不过这里只创建UAS的事务状态机,UAC的事务状态机的创建则要继续到下面找了,从我们的YouToo软电话代码中可知,发起呼叫和发起注册分别调用了 eXosip_call_send_initial_invite,eXosip_register_send_register这两个函数(另外用到的两个build函数则是分别构建这两个send函数要发送的SIP消息),查看这两个函数可知,UAC的事务处理状态机是在这里进行初始化的。   eXosip_register_send_register中可以看到是_eXosip_transaction_init (&transaction, NICT, eXosip.j_osip, reg)初始化UAC状态机,实际也同UAS是调用的osip_transaction_init函数,同样使用 osip_transaction_add_event (transaction, sipevent)将事件入状态机,状态机随后将自动处理调用相应回调函数处理逻辑了。   另有osip_new_outgoing_sipmessage(reg),表示发送消息,到这里,我们应该可以理解,真实的发送操作,是要到由状态机处理后,调用了消息发送回调函数才真正地将注册消息发送出去的。   同注册消息发送,它是NICT状态机,呼叫消息的发送是ICT,由eXosip_call_send_initial_invite处理,_eXosip_transaction_init (&transaction, ICT, eXosip.j_osip, invite)初始化了状态机,之前还有一个eXosip_call_init是用来初始化eXosip的一些参数的,暂时不管它,同样 osip_new_outgoing_sipmessage (invite)发送呼叫消息,但实际还是要状态机处理后调用消息发送回调函数真实发送呼叫请求函数的,osip_transaction_add_event (transaction, sipevent)则标准地,将事件入状态机,状态机将能处理随后的应用逻辑调用相应的回调函数了。   好了,作了这么多的分析,我们了解了eXosip是怎样调用oSIP来形成被我能方便地再次调用的了,可以看到,为了实现最大限度的跨平台和兼容性,代码中有大量的测试代码,宏定义和错误再处理代码,看起来非常吃力,但了解了其主要的调用框架:   初始化,回调函数设置,UAC和UAS事务处理状态机的启动,事件处理流程等,就可以基本明白了oSIP各个函数的主要作用和正确的用法了,下一步,可以参考eXosip来针对某个应用,去除掉大量暂时用不到的代码,来构建一个简单的SIP软电话和SIP服务器,来进一步深入oSIP学习应用了。  ------------------------------------------------------ [下回预告:完全基于oSIP的软电话实现及oSIP进一步学习] (CopyLeft by Meineson | www.mbstudio.cn,原创文章,欢迎转载,但请保留出处说明!) 附件为原作者提供的

2,163

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧