2014-10-27 62 views
1

我需要將使用recvfrom()接收的rtp數據包存儲到.pcap文件中。在C中,我如何將接收到的rtp數據包存儲到.pcap文件中 - UDP

我試圖打開與.pcap的擴展名的文件,做任何我收到的(即無效* BUF)直接FWRITE,但是當我嘗試使用Wireshark來打開該文件時,它給出的錯誤說法是「無法理解」 我應該怎麼做才能使之理解?

代碼我使用:

recvfrom(sockfd, buf, len, flags, (struct sockaddr *)&src_addr->ss, &src_addr->len); 
fp=fopen("test.pcap","a+"); 
fprintf(fp, "%s",buf); 

在UDP連接我如何接收和存儲的RTP包成可以理解的.pcap文件? 接收到的rtp pcakets是否還有其他需要添加的東西?

+1

不要爲此使用'fprintf'。使用'fwrite'。 – Qix 2014-10-27 06:03:04

+0

您可以閱讀[libpcapFileFormat](http://wiki.wireshark.org/Development/LibpcapFileFormat)。 .pcap文件需要一些文件頭才能被wireshark理解。 – SSC 2014-10-27 06:03:13

+0

我嘗試了fprintf以及fwrite,兩者都不工作@Qix – 2014-10-27 06:05:53

回答

0

爲了將數據包寫入pcap文件,必須添加以下標題。

全局頭

This header starts the libpcap file and will be followed by the first packet header: 

    typedef struct pcap_hdr_s { 
      guint32 magic_number; /* magic number */ 
      guint16 version_major; /* major version number */ 
      guint16 version_minor; /* minor version number */ 
      gint32 thiszone;  /* GMT to local correction */ 
      guint32 sigfigs;  /* accuracy of timestamps */ 
      guint32 snaplen;  /* max length of captured packets, in octets */ 
      guint32 network;  /* data link type */ 
    } pcap_hdr_t; 

記錄(包)標題:

Each captured packet starts with (any byte alignment possible): 

typedef struct pcaprec_hdr_s { 
     guint32 ts_sec;   /* timestamp seconds */ 
     guint32 ts_usec;  /* timestamp microseconds */ 
     guint32 incl_len;  /* number of octets of packet saved in file */ 
     guint32 orig_len;  /* actual length of packet */ 
} pcaprec_hdr_t; 

檢查link爲標題的說明。

查看這個link的代碼片段。

+0

讓我試試。謝謝 – 2014-10-27 09:39:32

相關問題