测winsocket如何参数化 谢谢
模拟终端机登录服务器,每个终端机都有一个编号,要对这个编号和buffer参数化脚本如下:
/*********************************************************************
* Created by Mercury Interactive Windows Sockets Recorder
*
* Created on: Tue Oct 06 10:17:21
*********************************************************************/
#include "lrs.h"
vuser_init()
{
lrs_startup(257);
return 0;
}
#include "lrs.h"
Action()
{
void mod_buffer(char* data, int psize)
{
unsigned char* ptr;
lrs_get_buffer_by_name("buf0", &data, &psize);
lrs_save_param_ex("socket0","static",data,0,psize,"null","ptr");
data = checksum(ptr, 19);
}
unsigned char checksum(unsigned char* data, int size)
{
int i;
unsigned char val = 0;
for(i = 0; i < size; i++)
val += data;
return val;
}
lrs_create_socket("socket0", "UDP", "LocalHost=0",LrsLastArg);
lrs_send("socket0", "buf0", "TargetSocket=192.168.1.11:8000", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);
lrs_close_socket("socket0");
return 0;
}
#include "lrs.h"
vuser_end()
{
lrs_cleanup();
return 0;
}
data.ws
;WSRData 2 1
sendbuf0 20
"\x00"
"~"
"\x00\x00\x00\x00\x84"
"0512010010" //终端机编号
"\x00\x00\xec"
recvbuf1 20
"\x00"
"~"
"\x00\x00\x00\x00\x85"
"0512010010" //终端机编号
"\x00\x00\xed"
-1
参数化后 这个代码是有问题的,哪位大侠能帮我改改,
0512010010是终端机编号,所有主机的编号是一样长的, 服务器要验证buf中的第二十位,通过才能让终端机登录,
buf由前19位累加而成,---"\x00"
"~"
"\x00\x00\x00\x00\x85"
"0512010010"
"\x00\x00\
我用这个函数unsigned char checksum(unsigned char* data, int size)来得到第二十位,是不是有问题?? 如何对这些做参数化
还请哪位大侠多多指点 哥们,既然说问题,不妨把问题症状给出来看看。
另外,你的send 和 recv 中都有16进制码,这些大概有关联?! 问题就是把终端编号参数化后 不能登陆服务器,服务器要验证BUF中的第二十位,第二十位由前十九位累加起来的 我觉得这个适用比对方法,CSDN找找,应该有合适比对方法:lol 比对方法不适合吧,checksum函数是算出第二十个字节,这里还是先要读取buffer然后在做累加算出checksum,才能 通过服务器的验证,
有知道的加我QQ 12719335 我写过类似的脚本,校验位是取发送内容一段字节的异或和~
建议楼主取得终端机编号,然后把发送数据写成一个数组,对整个数组做参数化~ 要验证的第二十位自定义函数做累加,然后用memcpy调用~ 验证的第二十位自定义函数方法最好依照服务器的写法,最方便的方法就是从开发人员那边把代码拷贝过来~~ 大概把你的问题看了一遍,由于在LR里面有16进制表示,也有符号表示,不知道你说是怎么加。。比如你data.wa中就有一个“~”符号,是怎么加法,还是都转成ASCII码来加。或者用16进制来加。。我用你的前19位加。怎么个算法都要进位了。也就是一个字符不能表示了。
页:
[1]