我有一个程序,用于监测通过页面向网站提交的数据。使用方法是:  
  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.