您的位置:首页 > 运维架构 > 网站架构

监测通过页面向网站提交的数据

2008-04-01 08:18 393 查看
我有一个程序,用于监测通过页面向网站提交的数据。使用方法是:
1/打开某个页面(比如mail.263.net)
2/填如数据(比如用户名和密码)
3/把Internet选项里面的代理服务器设为127.0.0.1:8080
5/启动监测程序
4/点击页面的提交按钮

这样在启动监测程序里就可以看到关于我们此次提交数据的详细情况,比如referer,cokkie等等。

问题如下:
这个程序在局域网下运行良好(我想可能是因为网卡设定了ip的缘故)。但是没有网卡的电脑,在拨号状态下程序就没有任何正面或负面效果!

这是不是因为本机没有ip而导致的呢?有什么方法解决这个问题呢?

程序主要有两个Unit如下:
// 1 //////////////////////////////////////////////////////////////////
unit pmain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, Menus, ImgList, StdCtrls, ExtCtrls, StdActns, ActnList,
ScktComp,FileCtrl;

type
Tmain = class(TForm)
Menu: TMainMenu;
ifile: TMenuItem;
Inew: TMenuItem;
iopen: TMenuItem;
iclose: TMenuItem;
ireply: TMenuItem;
N1: TMenuItem;
iexit: TMenuItem;
iedit: TMenuItem;
isaveto: TMenuItem;
N2: TMenuItem;
icut: TMenuItem;
icopy: TMenuItem;
ipaste: TMenuItem;
iview: TMenuItem;
itoolbar: TMenuItem;
istatusbar: TMenuItem;
iabout: TMenuItem;
iaboutit: TMenuItem;
TBar: TToolBar;
Buttonnew: TToolButton;
Buttonopen: TToolButton;
Buttonsend: TToolButton;
Buttonclose: TToolButton;
ToolButton5: TToolButton;
Buttonabout: TToolButton;
panal: TPanel;
Sbar: TStatusBar;
talkspace: TMemo;
Images: TImageList;
Actions: TActionList;
ACopy: TEditCopy;
ACut: TEditCut;
APaste: TEditPaste;
Atoolbar: TAction;
Asbar: TAction;
Anew: TAction;
Aopen: TAction;
Aclose: TAction;
Areply: TAction;
Aexit: TAction;
Aabout: TAction;
Server: TServerSocket;
Splitter1: TSplitter;
stepspace: TMemo;
Asaveto: TAction;
OpenD: TOpenDialog;
buttonsave: TToolButton;
procedure AtoolbarExecute(Sender: TObject);
procedure AsbarExecute(Sender: TObject);
procedure AnewExecute(Sender: TObject);
procedure AopenExecute(Sender: TObject);
procedure AcloseExecute(Sender: TObject);
procedure AexitExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure AsavetoExecute(Sender: TObject);
procedure AreplyExecute(Sender: TObject);
procedure ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientWrite(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerListen(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerGetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
procedure ServerGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
procedure ServerThreadEnd(Sender: TObject;
Thread: TServerClientThread);
procedure ServerThreadStart(Sender: TObject;
Thread: TServerClientThread);
procedure AaboutExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SbarResize(Sender: TObject);
private
{ Private declarations }
public
portnum:integer;
connectedcount:integer;
function dateandtime:string;
procedure showhint(sender:TObject);
{ Public declarations }
end;

var
main: Tmain;
implementation

{$R *.DFM}
uses port,handle;
function Tmain.dateandtime:string;
begin
result:=datetostr(date)+'/'+timetostr(time);
end;
procedure Tmain.showhint(sender:TObject);
begin
sbar.Panels[0].text:=application.Hint;
end;
procedure Tmain.AtoolbarExecute(Sender: TObject);
begin
atoolbar.Checked:=not atoolbar.Checked;
tbar.Visible:=atoolbar.Checked;
end;

procedure Tmain.AsbarExecute(Sender: TObject);
begin
asbar.Checked:=not asbar.Checked;
sbar.Visible:=asbar.Checked;
end;

procedure Tmain.AnewExecute(Sender: TObject);
begin
portdlg.ShowModal;
end;

procedure Tmain.AopenExecute(Sender: TObject);
begin
if server.Active then
begin
stepspace.Lines.Add
('监听端口'+inttostr(portnum)+'已经打开!');
exit;
end
else
begin
server.Port:=portnum;
server.Active:=true;
connectedcount:=0;
stepspace.Lines.Add('正在打开监听端口'+inttostr(portnum)+'!');
stepspace.Lines.Add(dateandtime);
sbar.Panels[1].text:='已经激活监听!端口为'+inttostr(portnum)+'!';
sbar.Panels[2].text:='';
end;
end;

procedure Tmain.AcloseExecute(Sender: TObject);
begin
if not server.Active then
begin
stepspace.Lines.Add('请注意,监听并未被激活!');
stepspace.Lines.Add(dateandtime);
exit;
end
else
begin
server.Active:=false;
stepspace.Lines.Add('正在停止监听!');
stepspace.Lines.Add(dateandtime);
connectedcount:=0;
sbar.Panels[1].text:='监听未被激活!';
sbar.Panels[2].text:='';
end;

end;

procedure Tmain.AexitExecute(Sender: TObject);
begin
close;
end;

procedure Tmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if server.Active then server.Active:=false;
end;

procedure Tmain.AsavetoExecute(Sender: TObject);
var tarfile:Textfile;
i:integer;
begin
if opend.Execute then
begin
if not fileexists(opend.filename) then
begin
i:=filecreate(opend.filename);
if i>0 then fileclose(I)
else
begin
messagedlg('请注意,建立文件错误!',mtWarning,[mbYes],0);
exit;
end;
end;
try
assignfile(tarfile,opend.filename);
append(tarfile);
for i:=0 to talkspace.Lines.Count-1 do
writeln(tarfile,talkspace.Lines.Strings[i]);
writeln(tarfile,'/******************开始********************/');
for i:=0 to stepspace.Lines.Count-1 do
writeln(tarfile,stepspace.Lines.Strings[i]);
writeln(tarfile,'/--------------------------------------/');
writeln(tarfile,dateandtime);
writeln(tarfile,'/******************结束********************/');
finally
closefile(tarfile);
end;
end;
end;

procedure Tmain.AreplyExecute(Sender: TObject);
begin
if not server.Active then
begin
stepspace.Lines.Add('请注意,监听并没有被激活!');
stepspace.Lines.Add(dateandtime);
exit;
end
else
handledlg.ShowModal;
end;

procedure Tmain.ServerAccept(Sender: TObject; Socket: TCustomWinSocket);
begin
connectedcount:=connectedcount+1;
sbar.Panels[1].text:='现在连接数为:'+inttostr(connectedcount);
stepspace.Lines.Add('接受客户端连接');
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
stepspace.Lines.Add('客户端请求连接!');
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
connectedcount:=connectedcount-1;
sbar.Panels[1].text:='现在连接数为:'+inttostr(connectedcount);
stepspace.Lines.Add('与客户端断开连接');
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
var repstr:string;
begin

stepspace.Lines.Add('连接发生错误!错误号为:'+inttostr(errorcode));

case errorevent of
eeGeneral:repstr:='The socket received an error message that does not fit into any of the following categories.';
eeSend: repstr:='An error occurred when trying to write to the socket connection.';
eeReceive: repstr:='An error occurred when trying to read from the socket connection.';
eeConnect: repstr:='A connection request that was already accepted could not be completed.';
eeDisconnect: repstr:='An error occurred when trying to close a connection.';
eeAccept: repstr:='A problem occurred when trying to accept a client connection req';
end;
repstr:='错误事件是:'+repstr;
stepspace.Lines.Add(repstr);
stepspace.Lines.Add(dateandtime);
try
socket.Free;
sbar.Panels[2].text:='';
connectedcount:=connectedcount-1;
sbar.Panels[1].text:='现在连接数为:'+inttostr(connectedcount);
finally
ErrorCode:=0;
end;
end;

procedure Tmain.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var tems:String;
begin
stepspace.Lines.Add('/*******************************************/');
stepspace.Lines.Add('客户端发送数据');

tems:=socket.ReceiveText;
stepspace.Lines.Add(tems);
stepspace.Lines.Add(dateandtime);
stepspace.Lines.Add('/*******************************************/');
end;

procedure Tmain.ServerClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
stepspace.Lines.Add('处于可以向客户端发送数据状态!');
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerListen(Sender: TObject; Socket: TCustomWinSocket);
begin
stepspace.Lines.Add('服务器端已经被激活,正在监听!');
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerGetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
begin
stepspace.Lines.Add('服务器端正在建立新的socket以进行通信');
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
stepspace.Lines.Add('服务器端正在获得新的线程以进行通信,该线程为socket '
+inttostr(clientsocket.Handle)
+'建立 '
+'线程号为:'+inttostr(socketThread.ThreadID));
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerThreadEnd(Sender: TObject;
Thread: TServerClientThread);
begin
stepspace.Lines.Add('服务器端正在结束线程,'
+'线程号为:'+inttostr(Thread.ThreadID));
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.ServerThreadStart(Sender: TObject;
Thread: TServerClientThread);
begin
stepspace.Lines.Add('服务器端正在开始线程,'
+'线程号为:'+inttostr(Thread.ThreadID));
stepspace.Lines.Add(dateandtime);
end;

procedure Tmain.AaboutExecute(Sender: TObject);
var explain,caption:pchar;
begin
explain:=stralloc(256);
caption:=stralloc(256);
strPcopy(explain,'这是一个简单的HTTP协议分析工具,'
+#13#10+'它模拟的是类似于IIS的WWW服务器,'
+#13#10+'等价于服务器端。通过监听及接收 '
+#13#10+'客户端的请求,可以得到相应的请 '
+#13#10+'求报文,便于分析。'
+#13#10+
#13#10+ ' 作者:goldensplit');
strpcopy(caption,'说明');
application.MessageBox(explain,caption,MB_OK);
strdispose(explain);
strdispose(caption);
end;

procedure Tmain.FormCreate(Sender: TObject);
begin
portnum:=80;
connectedcount:=0;
application.OnHint:=showhint;
sbar.Panels[1].text:='监听未被激活!';
if not DirectoryExists(ExtractFilePath(ParamStr(0))+'netlog')
then ForceDirectories(ExtractFilePath(ParamStr(0))+'netlog');
opend.InitialDir:=ExtractFilePath(ParamStr(0))+'netlog';
end;

procedure Tmain.SbarResize(Sender: TObject);
begin
sbar.Panels[0].width:=trunc(sbar.Width*0.4);
sbar.panels[1].width:=trunc(sbar.width*0.3);
end;

end.

// 2 //////////////////////////////////////////////////////////////////

unit port;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,Dialogs,
Buttons, ExtCtrls,pmain;

type
TportDlg = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
Bevel1: TBevel;
Label1: TLabel;
Label2: TLabel;
portedit: TEdit;
procedure OKBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
portDlg: TportDlg;

implementation

{$R *.DFM}

procedure TportDlg.OKBtnClick(Sender: TObject);
var i,portnumtemp:integer;
chartemp:char;
stringtemp:string[5];
begin
if length(trim(portedit.text))>5 then
begin
messagedlg('输入数据超长!',mtError,[mbYes],0);
exit;
end;
stringtemp:=trim(portedit.text);
for i:=1 to length(trim(portedit.text)) do
begin
chartemp:=stringtemp[i];
if ((chartemp<'0') or (chartemp>'9')) then
if ((chartemp='+') and (i=1)) then continue
else
begin
messagedlg('请正确的输入一个正整数!',mtError,[mbYes],0);
exit;
end;
end;
portnumtemp:=main.portnum ;
try
main.portnum:=strtoint(stringtemp);
except
on EConvertError do
begin
messagedlg('请正确的输入一个正整数!',mtError,[mbYes],0);
main.portnum:=portnumtemp;
exit;
end;
end;
with main do
begin
if ((portnum=portnumtemp)and(server.Active)) then
begin
stepspace.Lines.Add
('监听端口'+inttostr(portnumtemp)+'已经打开!');
exit;
end;
if server.Active then server.Active:=false;
server.port:=portnum;
server.active:=true;
connectedcount:=0;
stepspace.Lines.Add('正在打开监听端口'+inttostr(portnum)+'!');
stepspace.Lines.Add(dateandtime);
sbar.Panels[1].text:='已经激活监听!端口为'+inttostr(portnum);
sbar.Panels[2].text:='';
end;
end;

procedure TportDlg.FormActivate(Sender: TObject);
begin
portedit.Text:=inttostr(main.portnum);
end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐