提供一個讀取CAP檔案的類

來源:互聯網
上載者:User

     最近在做一些協議分析的工作,常常和ETHREAL打交道。 我寫好自己的程式後,往往要放到真實的網路環境中去測試,看自己的通訊協定處理常式是否正確。反反覆複覺得很不爽。
      於是考慮,如果可以把ETHREAL抓下來的資料直接作為測試資料使用,就方便多了。於是研究了一下CAP檔案的格式(見上篇文章),自己寫了一個讀取CAP檔案內容的類,公布給大家,希望能對你們有所用處。
     具體的使用請看壓縮包中的README.TXT檔案,此代碼能同時在LINUX和WINDOWS上使用。
    沒有辦法添加附件,請需要的朋友發郵件給我:ahfu@qq.com  可以從這裡下載:http://download1.csdn.net/down3/20070516/16191424179.rar

 

CapFileReader類使用說明

功能:讀取ethreal產生的CAP格式的檔案內的資訊
介面說明
CapFileReader(void);  //預設建構函式
~CapFileReader(void);  //解構函式
bool Open(const char* CapFile);  //開啟CAP檔案,參數為檔案的路徑
bool Read();  //讀取下一個資料區段,達到檔案末尾返回false
void Close();  //關閉Cap檔案的讀取
inline unsigned short DataLength() const;  //得到當前資料區段的資料長度,要先調用Read()方法
bool GetSourceMacAddr(char* Buffer, int Length);  //得到當前資料區段的源網卡物理地址,要先調用Read()方法
bool GetDestMacAddr(char* Buffer, int Length);  //得到當前資料區段的目的網卡物理地址,要先調用Read()方法
bool GetIPHeader(IP_HEADER& ip);  //假設當前資料區段的協議是IP協議,獲得IP協議的頭資訊,要先調用Read()方法
bool GetIPData(int HeadLen, char* Buffer, int Length);  //假設當前的資料區段的協議是IP協議,獲得IP協議的內容,要先調用Read()方法
bool GetInternetData(char* Buffer, int Length);  //得到Internet協議的內容,包括ARP、IP等,要先調用Read()方法
inline time_t GetStartTime() const;  //得到開始抓包的時間
inline unsigned int GetMicroSecond() const;  //得到當前資料區段相對開始抓包時間的微秒數,要先調用Read()方法
inline unsigned short GetInternetProtocol() const;  //得到當前資料區段的協議標識,要先調用Read()方法

使用樣本:
CapFileReader cap;
if (!cap.Open("1.cap"))
{
    printf("File not exists!/n");
    return;
}
IP_HEADER ip;
while (cap.Read())
{
    if (cap.GetInternetProtocol()==PROTOCOL_IP)
    {
        if (!cap.GetIPHeader(ip))
        {
            printf("Get IP Header fail!/n");
            continue;
        }
        if (ip.Proto == PROTOCOL_TCP)
        {
            printf("TCP/n");
        }
        else if (ip.Proto == PROTOCOL_UDP)
        {
            printf("UDP/n");
        }
        else
        {
            printf("IP/n");
        }
    }
    else if (cap.GetInternetProtocol()==PROTOCOL_ARP))
    {
        printf("ARP/n");
    }
    else
    {
        printf("unknown/n");
    }
}
cap.Close();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.