使用ClientSocket控件实现CSDN论坛帖子的自动回复

使用ClientSocket控件实现CSDN论坛帖子的自动回复

写此文章的目的不是要鼓励大家恶意灌水,而是要了解Http头信息传输的机制及Cookie的一些知识,讲之前大家先看一下下面我在CSDN所截获的回复帖子的Http包信息内容:

typestate=1&Point=0&TopicName=%B7%A2%CC%F9%B2%E2%CA%D4%A3%AC%CF%D0%C8%CB%CE%F0%BD%F8%A3%A1&Room=1404&Content=rt

//Point:分数0 TopicName:文章标题:发贴测试,闲人勿进!是经过unicode编码的 Content:内容: rt 上面是传递的参数

10.104.9.30(1062)-> //发送方IP及端口

10.104.9.30(80) //接受方IP及端口
POST /Expert/PostNew_SQL.asp HTTP/1.1 //接受页面及HTTP版本
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, /
Referer: http://expert.csdn.net/Expert/PostNew.asp?room=1404 //提交的地址
Accept-Language: zh-cn //中文语言
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate //接受压缩格式类型
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) //用户环境
Host: expert.csdn.net //主机名称
Content-Length: 111 //长度:111
Connection: Keep-Alive //保持激活状态
Cache-Control: no-cache //没有使用缓存
Cookie: remenber=0; ASPSESSIONIDAAATSBBS=POHKDGIBFHAMPECBCDHIHBCD; room=0; username=dashi888; speaknum=0; speaktime=2003%2D5%2D15+11%3A56%3A34; adminok=True; userid=487815; info1=0; m%5Ftype=1; aszx=0a727a0323230cd62e4cf5326besba01; mid=476831 //COOKIE的内容

注:用户的Cookie是经过32位加密的,我们要先构造自己要发送的Http包信息

截图如下:

![](C:\Documents and Settings\Administrator\桌面\guan.gif)

下面是代码部分:

unit submit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, NMURL, StdCtrls, ComCtrls, ExtCtrls;

type
TForm1 = class(TForm)
url: TNMURL;
ClientSocket1: TClientSocket;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
StatusBar1: TStatusBar;
memo2: TMemo;
Memo1: TMemo;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit5: TEdit;
Edit6: TEdit;
Label9: TLabel;
Edit7: TEdit;
Button3: TButton;
Timer1: TTimer;
Button4: TButton;
Timer2: TTimer;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Edit7KeyPress(Sender: TObject; var Key: Char);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormShow(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
TopicID,StartID,EndID:integer;
DelayTime :integer;
succ :boolean;
procedure SendData();
procedure BuildHttpHead();
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Active :=true;
Button1.Enabled :=false;
BuildHttpHead();
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
StatusBar1.SimpleText:='连接出错!';
errorcode:=0; //出错代码
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s:string;
begin
succ :=false;
s:=socket.ReceiveText;
if (pos('200',s)<>0) then //返回信息:200 OK,表示发送成功
begin
StatusBar1.SimpleText:='成功!';
clientsocket1.Active :=false;
succ :=true;
Button1.Enabled :=true;
end else
begin
StatusBar1.SimpleText:='失败!';
clientsocket1.active:=true;
succ :=false;
Button1.Enabled :=false;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
DelayTime :=strtoint(trim(edit7.text));
timer1.Interval :=DelayTime;
timer1.Enabled :=True;
clientsocket1.Active :=true;
SendData; //发送数据
end;

procedure TForm1.SendData;
var
i:integer;
begin
EndID :=StrToInt(trim(edit6.text));
TopicID :=StrToInt(trim(edit4.text));
if TopicID

 1<endid (compatible;="" *="" *'+#13#10;="" +#13#10;="" 4.0="" 5.0)'+#13#10;="" 6.0;="" :="true;" application="" begin="" buildhttphead();="" button3.enabled="" clientsocket1.active="" deflate'+#13#10;="" edit1.text<="" edit4.text="" end;="" expert.csdn.net'+#13#10;="" gif,="" gzip,="" http头信息="" if="" image="" inc(topicid);="" jpeg,="" mozilla="" msie="" msword,="" no-cache'+#13+#10;="" nt="" pjpeg,="" procedure="" sendp,sends,sendc:string;="" sends:="sends+'Cache-Control:" startid="" tform1.buildhttphead;="" tform1.button3click(sender:="" tform1.button4click(sender:="" then="" timer1.enabled="" timer1timer(sender);="" tobject);="" var="" vnd.ms-excel,="" vnd.ms-powerpoint,="" windows="" x-shockwave-flash,="" x-www-form-urlencoded'+#13#10;="" x-xbitmap,="" zh-cn'+#13#10;="" 构造cookie信息="" 构造http头信息="">'' then   
 2begin   
 3url.InputString :=trim(edit1.Text);   
 4sendp:='username='+url.Encode ; //unicode编码   
 5sendc:='csdnname='+url.Encode ;   
 6end;   
 7if edit2.text&lt;&gt;'' then   
 8begin   
 9url.InputString :=trim(edit2.Text);   
10sendp:=sendp+';userid='+url.Encode;   
11sendc:=sendc+'&amp;csdnpassword='+url.Encode ;   
12end;   
13if edit3.text&lt;&gt;'' then   
14begin   
15url.InputString :=trim(edit3.Text);   
16sendp:=sendp+';aszx='+url.Encode;   
17end;   
18sends:=sends+'Cookie: '+sendp+#13+#10;   
19//发送的内容   
20url.inputstring:=trim(edit4.text);   
21sendc:=sendc+'&amp;Topicid='+url.Encode;   
22url.InputString :=trim(memo1.Text);   
23sendc:=sendc+'&amp;ReplyContent='+url.Encode;   
24sendc:=sendc+'&amp;xmlReply=aaaaa';   
25sends:=sends+'Content-Length: '+inttostr(length(sendc))+#13#10;   
26sends:=sends+'Connection: Keep-Alive'+#13+#10+#13#10 +sendc;   
27memo2.Lines.Clear;   
28memo2.Lines.Add(sends);   
29clientsocket1.Socket.SendText(sends); //发送   
30end; 
31
32procedure TForm1.ClientSocket1Connect(Sender: TObject;   
33Socket: TCustomWinSocket);   
34begin   
35BuildHttpHead(); //一连接成功就发送   
36end; 
37
38procedure TForm1.FormShow(Sender: TObject);   
39begin   
40succ :=false; //是否成功   
41end; 
42
43procedure TForm1.Button5Click(Sender: TObject);   
44begin   
45button1.Enabled :=true;   
46clientsocket1.Active :=false;   
47end; 
48
49end.</endid>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus