谁知道OICQ发送和接收数据的格式?(紧急) 关注!我也知道是UDP方式,但具体的包结构不知???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主 题:追捕的OICQ探测技术 ---冯志宏 [撰稿]作 者:pgcat所属论坛:灌水乐园问题点数:100回复次数:33发表时间:2001-2-16 14:54:00 实际上目前所有的OICQ探测方法都一样,发送一个OICQ消息给对方,凭借OICQ 的返回信息来判断对方的OICQ号码,具体的DELPHI实现如下: NMUDP1是ICS控件包的UDP控件。 NMUDP1.ReportLevel := Status_Basic; NMUDP1.RemoteHost := edit1.Text; NMUDP1.RemotePort := 4000; UdpTmpStr :=#$02 +#$03 +#$0a +#$00 +#$78 +#13 +#$A + '88888' +#$1f +#$30 +#$1f + #$33 + #$39 +#$1f +FormatDateTime('yyyy-mm-dd',now) +#$1f +FormatDateTime('hh:mm:ss',now) +#$1f + '你正在被某位朋友查询。他使用了追捕这个工具软件(http://www.zhuibu.com/)进行探测,此OICQ号码已经被反馈给对方。' + '信息所提示的OICQ号码为虚假号码,但可以即时回复。' + #$03; if OicqCheck.Checked then begin for SendUdpNum:=1 to 10 do begin MyStream := TMemoryStream.Create; try MyStream.Write(UdpTmpStr[1], Length(UdpTmpStr)); NMUDP1.SendStream(MyStream); finally MyStream.Free; end; end; end; 追捕是怎样得到检测结果的呢?下面是具体实现的程序段: MyStream := TMemoryStream.Create; try NMUDP1.ReadStream(MyStream); SetLength(TmpStr,NumberBytes); MyStream.Read(TmpStr[1],NumberBytes); finally MyStream.Free; end; j := Pos( #$02 +#$02 +#$00 +#$00 , TmpStr); k := Pos( #$02 +#$03 +#$00 +#$00 , TmpStr); m := Pos( #$02 +#$03 +#$0a +#$00 , TmpStr); o := Pos( #$02 +#$03 +#$02 +#$00 , TmpStr); if (j=1) or (k=1) or (m=1) or (o=1) then begin j := Pos( #$02 +#$02 +#$00 +#$00 + 'y', TmpStr); k := Pos( #$02 +#$03 +#$00 +#$00 + 'y', TmpStr); m := Pos( #$02 +#$03 +#$0a +#$00 + 'y', TmpStr); o := Pos( #$02 +#$03 +#$02 +#$00 + 'y', TmpStr); OicqVer := '未知'; if j=1 then OicqVer := '425'; if k=1 then OicqVer := '725'; if m=1 then OicqVer := '820'; if o=1 then OicqVer := '810'; if (j=1) or (k=1) or (m=1) or (o=1) then begin TmpS := ''; for j:=1 to length(TmpStr) do begin if TmpStr[j] in ['0'..'9'] then tmpS := tmpS + TmpStr[j]; end; if TmpS='0' then Label2.Caption := 'OICQ处于关闭状态,版本:'+ OicqVer else Label2.Caption :='OICQ号码为'+ TmpS + ',版本:'+ OicqVer; end; j := Pos( #$02 +#$02 +#$00 +#$00 + 'x', TmpStr); k := Pos( #$02 +#$03 +#$00 +#$00 + 'x', TmpStr); m := Pos( #$02 +#$03 +#$0a +#$00 + 'x', TmpStr); o := Pos( #$02 +#$03 +#$02 +#$00 + 'x', TmpStr); if (j=1) or (k=1) or (m=1) or (o=1) then begin J := 8; TmpOicqNUm := ''; While TmpStr[J]<>#$1f do begin TmpOicqNum :=TmpOicqNum + TmpStr[J]; Inc(J); end; J := J + 6; While TmpStr[J]<>#$1f do begin Inc(J); end; J := J + 1; While TmpStr[J]<>#$1f do begin Inc(J); end; J := J + 1; TmpOicqMsg := ''; While TmpStr[J]<>#$03 do begin TmpOicqMsg := TmpOicqMsg + TmpStr[J]; Inc(J); end; if TmpOicqMsg<>LastOicqMessage then begin LastOicqMessage := TmpOicqMsg; Messagebox(Form1.handle, PChar('OICQ用户' + TmpOicqNum + '对你的探测作出回应:' + #$0D + #$0A + TmpOicqMsg), '警告信息', MB_ICONWARNING +mb_ok); end; end; exit; end; ASP 服务程序代码 根据音乐绘制波形 api消息调用过程不懂,请高手指点! window消息处理机制 已知32位图的象素数据,怎么转换成24位图的数据? spin控件用法 请问,用VC ODBC怎么实现多表联结查询? 如何知道已选定的ITEM处于CTreeCtrl的第几层? 请教 我编了一个修改口令的小程序,结果运行时有点问题,希望哪位仁兄给解答一下,谢谢! 请教大家一个问题:有关mciSendCommand()的用法?? 如何判断CString 中的某个位置是不是汉字?
作 者:pgcat
所属论坛:灌水乐园
问题点数:100
回复次数:33
发表时间:2001-2-16 14:54:00
实际上目前所有的OICQ探测方法都一样,发送一个OICQ消息给对方,凭借OICQ
的返回信息来判断对方的OICQ号码,具体的DELPHI实现如下:
NMUDP1是ICS控件包的UDP控件。 NMUDP1.ReportLevel := Status_Basic;
NMUDP1.RemoteHost := edit1.Text;
NMUDP1.RemotePort := 4000; UdpTmpStr :=#$02 +#$03 +#$0a +#$00 +#$78 +#13 +#$A
+ '88888' +#$1f +#$30 +#$1f + #$33 + #$39 +#$1f
+FormatDateTime('yyyy-mm-dd',now)
+#$1f
+FormatDateTime('hh:mm:ss',now)
+#$1f
+ '你正在被某位朋友查询。他使用了追捕这个工具软件(http://www.zhuibu.com/)进行探测,此OICQ号码已经被反馈给对方。'
+ '信息所提示的OICQ号码为虚假号码,但可以即时回复。' + #$03; if OicqCheck.Checked then begin
for SendUdpNum:=1 to 10 do begin
MyStream := TMemoryStream.Create;
try
MyStream.Write(UdpTmpStr[1], Length(UdpTmpStr));
NMUDP1.SendStream(MyStream);
finally
MyStream.Free;
end;
end;
end; 追捕是怎样得到检测结果的呢?下面是具体实现的程序段:
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
finally
MyStream.Free;
end;
j := Pos( #$02 +#$02 +#$00 +#$00 , TmpStr);
k := Pos( #$02 +#$03 +#$00 +#$00 , TmpStr);
m := Pos( #$02 +#$03 +#$0a +#$00 , TmpStr);
o := Pos( #$02 +#$03 +#$02 +#$00 , TmpStr); if (j=1) or (k=1) or (m=1) or (o=1) then begin
j := Pos( #$02 +#$02 +#$00 +#$00 + 'y', TmpStr);
k := Pos( #$02 +#$03 +#$00 +#$00 + 'y', TmpStr);
m := Pos( #$02 +#$03 +#$0a +#$00 + 'y', TmpStr);
o := Pos( #$02 +#$03 +#$02 +#$00 + 'y', TmpStr);
OicqVer := '未知';
if j=1 then OicqVer := '425';
if k=1 then OicqVer := '725';
if m=1 then OicqVer := '820';
if o=1 then OicqVer := '810';
if (j=1) or (k=1) or (m=1) or (o=1) then begin
TmpS := '';
for j:=1 to length(TmpStr) do begin
if TmpStr[j] in ['0'..'9'] then tmpS := tmpS + TmpStr[j];
end;
if TmpS='0' then Label2.Caption := 'OICQ处于关闭状态,版本:'+ OicqVer
else Label2.Caption :='OICQ号码为'+ TmpS + ',版本:'+ OicqVer;
end; j := Pos( #$02 +#$02 +#$00 +#$00 + 'x', TmpStr);
k := Pos( #$02 +#$03 +#$00 +#$00 + 'x', TmpStr);
m := Pos( #$02 +#$03 +#$0a +#$00 + 'x', TmpStr);
o := Pos( #$02 +#$03 +#$02 +#$00 + 'x', TmpStr);
if (j=1) or (k=1) or (m=1) or (o=1) then begin
J := 8;
TmpOicqNUm := '';
While TmpStr[J]<>#$1f do begin
TmpOicqNum :=TmpOicqNum + TmpStr[J];
Inc(J);
end;
J := J + 6;
While TmpStr[J]<>#$1f do begin
Inc(J);
end;
J := J + 1;
While TmpStr[J]<>#$1f do begin
Inc(J);
end;
J := J + 1;
TmpOicqMsg := '';
While TmpStr[J]<>#$03 do begin
TmpOicqMsg := TmpOicqMsg + TmpStr[J];
Inc(J);
end;
if TmpOicqMsg<>LastOicqMessage then begin
LastOicqMessage := TmpOicqMsg;
Messagebox(Form1.handle, PChar('OICQ用户' + TmpOicqNum + '对你的探测作出回应:' + #$0D + #$0A + TmpOicqMsg), '警告信息', MB_ICONWARNING +mb_ok);
end;
end;
exit;
end;