软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
快速开发关于SP程序

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

快速开发关于SP程序

第一次接触SGIP协议 来发短消息 看了两天,一头雾水,还好,网络时代,在网上收集到大量的资料,其中还有关于CMPP

SGIP是联通的 CMPP是移动的 两者差别不大.

 

在网上也搜索到一些现成的开发库,试用版的,正式使用是要花钱的,

而且我也不敢使用它的开发库,万一那里有后门怎么办,

因为我做程序经常为了方便调试有一些后面,只是在正式交付时将这些后面去掉.

 

开发条件

1.SGIP协议 说明(网上有很多)

2.SGIP模拟网关(网上有很多)

3.掌握一种编程语言,包括掌握这种语言如何进行socket通讯

4.UltraEdit 这太重要了,分析数据包的时候使用

 

快速开发条件

1.我写了一个程序A 功能 监听一个端口 接收这个端口的数据并保存成文件,我要使用UltraEdit分析数据包.

2.随便找一个开发库,还有要带个使用开发库的例子.

3.拿笔和笔记本,可不是电脑笔记本,是可以使用笔写字的笔记本.我们随时要记录一些数据格式.

 

开始拿到SGIP协议,联通的协议实在是不是很规范,例如 1位的integer,这句话就是错的 integer4位的.我们不管它了认为它是char 正好是1位的.

 

开始动手吧

 

.启动SGIP模拟网关 配置 因为是模拟的地址设置为127.0.0.1,端口采用的是默认的

.编译那个使用开发库的例子 并且安装说明配置它,让后执行.一般来说SGIP模拟网关就会接到短消息了.OK

.SGIP模拟网关停掉,启动程序A,监听端口8801,然后再运行那个使用开发库的例子,程序A此时会接到数据

.分析数据

.第一个数据包是进行身份校验的 就是Bind,具体格式看SGIP协议好了,使用UltraEdit打开数据包,要以Hex看要.

SGIP协议里的Bind包对照看,第一位是00 00 00 3Dinteger4,16进制的3D就是10进制的61,说明Bind包数据长度是61(char).以后的数据您一点一点对照SGIP协议就是了

 

 

.然后知道我要干什么了吧,(我真的很坏吗:-)),我们现在还没有编程呢,那我们就写个程序 组包 将这个截获的数据包发出去,之前要启动模拟网关哟,网关没有反映,将用户名和密码改一下,重发,模拟网关显示密码错误,,成功了.

.由于是长连接,发出数据后,模拟网关是有数据返回的,你也要了解SGIP协议里返回包的格式

.改程序A 如果收到Bind包数据发出返回包,告诉客户端认证成功.

.以后的工作就是比较繁杂的数据包组包了

写到这里,我就不多写了,

注意一点 integer4位数据是右对齐的一下是将 int型的转换为右对齐的char[5],这是c语言的,其它语言请自行编写

 

#define HIGH_PRIORITY                        1

#define LOW_PRIORITY                        0

int HostByteOrder()

{

       union {

              unsigned char c[2];

              unsigned short int i;

       }CharToInt;

       CharToInt.i=0x35ca;

       if(CharToInt.c[0]==0x35) return LOW_PRIORITY;

       else return HIGH_PRIORITY;

}

 

void __stdcall sputl(const long lngDataLen,char *lBuf)

{/*将整型数转换为4字节的网络字节序*/

       union {

              char c[4];

              long l;

       }LongToChar;

 

       int i;

 

       LongToChar.l=lngDataLen;

       if((HostByteOrder())==HIGH_PRIORITY)

       {

              for(i=0;i<4;i++)

              {

                     lBuf[i]=LongToChar.c[4-i-1];

              }

       }

       else

       {

              for(i=0;i<4;i++)

              {

                     lBuf[i]=LongToChar.c[i];

              }

       }

       lBuf[4]=0x00;

       return;

}

 

我一直提到程序A ,这个一个十分简单的程序 就是socket监听端口 的程序 我使用BCB5写的如果你不会写请联系我

其它程序,可以到网上去搜索,暂不提供

(版权所有,转载时请注明作者和出处)

王一冰

[email protected]

[email protected]

[email protected]

2004-4-19

 

 

 

 




相关文章

相关软件