pcap_file_generator
1.0.0
이 라이브러리는 파일을 생성하고 PCAP 형식을 읽도록 설계되었습니다. UDP 패킷 생성도 지원됩니다.
기능:
이 함수는 파일을 생성하고 오류 시 NULL을 반환하거나 PCAPFILE에 대한 포인터를 반환합니다.
lpcap_create를 통해 생성된 파일을 채우는 함수는 오류 시 0을 반환합니다. 입력 시 그녀는 다음을 받습니다.
파일 닫기 기능 입력으로 받습니다:
network_packet_frame_t의 데이터를 기반으로 ethernet-ip-udp 데이터 패킷 ethernet_data_t를 생성하는 기능은 다음을 입력으로 받습니다.
파일 열기 기능. 파일에 PCAP 형식의 기호가 포함되어 있지 않으면 다른 오류 상황과 마찬가지로 0이 반환됩니다.
PCAPFILE 설명자에서 파일 헤더를 읽는 기능 * pcap_hdr_t에 이미 열려 있는 파일의 pfl * phdr phdr은 기존 메모리 영역을 가리켜야 합니다. 오류 시 0을 반환합니다.
PCAPFILE 핸들에서 파일 데이터 프레임을 읽는 함수 * pcaprec_hdr_and_data_t에 이미 열려 있는 파일의 pfl * phdr phdr은 기존 메모리 영역을 가리켜야 합니다. 오류 시 0을 반환합니다.
위치 포인터를 프레임 번호(즉, 레코드) Record_num으로 이동시키는 함수입니다.
단순 패킷 생성을 사용한 사용 예
int i=0;
const int PKTS_COUNT = 212000;
int PKTS_LEN = 540;
static ethernet_data_t eda;
eda.len = PKTS_LEN;
PCAPFILE * pfl = lpcap_create("./pcaplibtestfile.pcap");
for( i=0;i< PKTS_COUNT;i++ )
{
/* TODO: fill data memcpy(eda.data , YOUR_DATA_BUF,SIZE_YOUR_DATA_BUF );
eda.len = SIZE_YOUR_DATA_BUF;
*/
lpcap_write_data( pfl , &eda , i, 0 );
}
lpcap_close_file( pfl );
UDP 패킷 생성 예
#include "pcap_file_generator.h"
#include "ethernet.h"
.......
int i=0;
const int PKTS_COUNT = 2000100;
const int udp_data_sz = 1440;// udp data size
ethernet_data_t eda;
eda.len = udp_data_sz +(sizeof(eth_frame_t)+sizeof(ip_packet_t))+8;//34 - headers len
uint8_t eth_data[eda.len];
eth_frame_t * eth_f = (eth_frame_t *) eth_data;
network_packet_frame_t npf;
uint8_t m_addr[] = {0xef,0xab,0x03, 0xdc,0xee,0x11};
memcpy(npf.dst_mac ,m_addr , sizeof(m_addr));
//change mac
m_addr[4] = 0x44;
m_addr[5] = 0x88;
memcpy(npf.src_mac ,m_addr , sizeof(m_addr));
npf.src_port = 4567;
npf.dst_port = 4568;
strcpy(npf.src_ip, "192.168.23.100");
strcpy(npf.dst_ip, "192.168.22.105");
uint8_t tdata[ udp_data_sz ];
npf.data = tdata;
npf.data_len = sizeof(tdata);
build_udp_frame(eth_f , &npf ); // convert network_packet_frame_t to eth_frame_t
eda.data = (void *) eth_f;
PCAPFILE * pfl = lpcap_create("./pcaplibtestfile.pcap");
for( i=0;i< PKTS_COUNT;i++ )
{
lpcap_write_data( pfl , &eda , i, 0 );
}
lpcap_close_file( pfl );
파일에서 패키지를 읽는 예
PCAPFILE * pfr = lpcap_open("./pcaplibtestfile.pcap");
pcap_hdr_t phdr;
if( lpcap_read_header( pfr, &phdr ))
{
int rese_rec_read = 0 ;
pcaprec_hdr_and_data_t p_rec_data;
do{
rese_rec_read = lpcap_read_frame_record( pfr , &p_rec_data);
}while(rese_rec_read>0);