[Winpcap-users] problem with sending raw packets with
pcap_sendqueue_transmit/PacketSendPackets
Nicolai Hansen
nic at hsautomatic.com
Mon Jul 17 12:56:06 GMT 2006
Hi List,
I'm new on here - I checked the archives as I thought someone would've had a
problem like this before but I couldn't find anything. Maybe I'm just doing
something wrong but I can't figure out what. I'm using pcap 3.1 for windows
and this is my problem:
I am creating a raw packet of 1038 bytes (1024+IP header), I place this same
packet in the sendqueue 8192 times (here I can check that the queue's
datapointers and length are correct). It's just some junk data: the IP
header is 00 01 02 03 04 05 06 07 08 09 0A 0B 0C and the packet is full of
AAs.
When I call pcap_sendqueue_transmit, it sends out all 8192 packets. I sniff
them with ethereal and at a first glance it looks fine... BUT! A few of the
packets suddenly has a header of 00 XX XX XX 04 05 06 ... - 3 bytes changed
into something that looks completely random. In the beginning of the
transmission its pretty rare, but for the last 500 packets almost every
packet has this error.
I inspect the buffer at the positions where I detect the problems, but the
buffer is in perfect order.
I also tried to sort the buffer part out myself and use PacketSendPackets to
send the data - with the excact same result.
Has anyone got any comments? The code is below:
void SendRawData(pcap_if_t *device)
{
pcap_t *fp;
pcap_send_queue *queue;
char error[PCAP_ERRBUF_SIZE];
u_char data[1038];
eth_header *packet;
pcap_pkthdr pkth;
char *pktdata;
int i;
packet=(eth_header *) &data[0];
if ((fp=pcap_open_live(device->name, 1038, 1, 1000, error))==NULL)
{
fprintf(stderr, "Cannot send packet: %s\n\r", error);
return;
}
queue=pcap_sendqueue_alloc(8192*1054);
for (i=0; i<14; i++)
packet->data[i]=255-i;
for (i=14; i<1024; i++)
data[i]=0xAA;
pkth.len=1038;
pkth.caplen=1038;
pktdata=(char *) &data[0];
printf("Sending 8 MByte of data\n\r");
for (i=0; i<1024; i++)
pcap_sendqueue_queue(queue, &pkth, data);
pcap_sendqueue_transmit(fp, queue, 0);
pcap_sendqueue_destroy(queue);
return;
}
More information about the Winpcap-users
mailing list