線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1390
推到 Plurk!
推到 Facebook!

Sniffer問題 ( recv() 之後就有問題 )

尚未結案
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-28 20:47:57 IP:220.134.xxx.xxx 未訂閱
最近參考http://study.viphot.com/InfoView/Article_2611.html然後自己也依樣寫了一個sniffer ... 可是不知道為什麼程式好像到了recv()這函數就有問題!!    就是在產生/設定socket, 程式跑到recv()好像就會停住, 好像也沒蘭到任何封包??    所以想請大家幫忙看看是不是少了或是做錯什麼地方 ... 程式碼如下!    Unit1.cpp
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include 
#include 
#include  
#include     #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    WSADATA WSAData;
    BOOL Opt = true;
    char LocalName[25];
    struct hostent *Host;        if(WSAStartup(MAKEWORD(2, 2), &WSAData))
        throw Exception("WSAStartup error!");        Sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    if(!Sock)
        throw Exception("socket setup error!");        if(setsockopt(Sock, IPPROTO_IP, IP_HDRINCL, (char*)&Opt, sizeof(Opt)))
        throw Exception("setsockopt IP_HDRINCL error!");        if(gethostname(LocalName, sizeof(LocalName)))
        throw Exception("gethostname error!");        Host = gethostbyname(LocalName);
    if(!Host)
        throw Exception("gethostbyname error!");         Target.sin_family = AF_INET;
    Target.sin_port = htons(57274);
    Target.sin_addr = *(in_addr *)Host->h_addr_list[0];        if(bind(Sock, (PSOCKADDR)&Target, sizeof(Target)))
        throw Exception("bind error!");        }
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
    unsigned long Value;
    int PktNum = 0;        if(Button1->Caption == "開始"){
        Value = true;
        if(ioctlsocket(Sock, SIO_RCVALL, &Value))
            throw Exception("ioctlsocket SIO_RCVALL error!");            Button1->Caption = "停止";
        //ListView1->Items->Clear();
        Step = true;
    }        else{
         Value = false;
         if(ioctlsocket(Sock, SIO_RCVALL, &Value))
            throw Exception("ioctlsocket SIO_RCVALL error!");             Button1->Caption = "開始";
         Step = false;
    }        //跑到這就有問題了? ... 我用label1來顯示封包數, 但是卻沒改變?
    /*while(Step){
        if(recv(Sock, RcvBuf, 512, 0) > 0){
            PktNum  ;
            Label1->Caption = PktNum;
    
            .............    
        }
    }*/    }
//---------------------------------------------------------------------------
Unit1.h
//---------------------------------------------------------------------------    #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:        // IDE-managed Components
        TListView *ListView1;
        TButton *Button1;
        TLabel *Label1;
        void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
        __fastcall TForm1(TComponent* Owner);
        SOCKET Sock;
        SOCKADDR_IN Target;
        int Step;
        char RcvBuf[512];
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
麻煩大家看看嘍 ... 謝謝!!!
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-30 12:41:28 IP:218.160.xxx.xxx 未訂閱
請參考,看看能不能解你的問題. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50657
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-02 11:31:06 IP:220.134.xxx.xxx 未訂閱
hi brook~ 其實我在撰寫該程式的同時也有參考過你的文章~ 程式碼看起來大致相同, 我想問一下, 增加ws2_32.lib是直接從Projecj - Add to Project這步驟就可以了嗎?還是需要增加什麼?    抱歉, 最近才開始用BCB ... 所以不是很清楚!< > 先謝謝你的回答 .. < >
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-09 12:36:15 IP:59.104.xxx.xxx 未訂閱
搞不定 .. 還是大家有做好的成品可以分享一下呢? 想研究一下哪裡有問題 ... 謝謝!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-18 17:33:06 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-29 18:19:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!