[Winpcap-users] Problem Reassembling IP Packets,
missing packet-fragments!?
Sam.Fielden at L-3com.com
Sam.Fielden at L-3com.com
Mon Apr 30 18:06:58 GMT 2007
Ahhhhh... yes now that you point it out I understand perfectly, as I am
filtering with a port number (which resides in either the TCP or UDP
header) I am essentially ignoring all fragments subsequent to the first
(which has the TCP/UDP header).
So often one cannot see the forest for the trees...
Thanks for your help!
Sam
-----Original Message-----
From: winpcap-users-bounces at winpcap.org
[mailto:winpcap-users-bounces at winpcap.org] On Behalf Of Gianluca Varenni
Sent: Monday, April 30, 2007 12:42 PM
To: winpcap-users at winpcap.org
Subject: Re: [Winpcap-users] Problem Reassembling IP
Packets,missing packet-fragments!?
The filter you are using discards IP fragments. The problem is
that the filtering engine is stateless, it has no concept of IP
reassembly. So if you filter on a TCP port, it will only accept packets
that do contain a valid UDP header. If you try the same capture filter
within Wireshark, you will obtain the same result (only the first
fragment captured). The only solution to the problem is filtering on IP
addresses with a BPF filter, and then filtering on UDP ports on your own
after IP reassembly.
Hope it helps
GV
----- Original Message -----
From: Sam.Fielden at l-3com.com
To: winpcap-users at winpcap.org
Sent: Monday, April 30, 2007 9:11 AM
Subject: RE: [Winpcap-users] Problem Reassembling IP
Packets,missing packet-fragments!?
Gianluca,
I am using a capture filter generated by the following
code, note an example of the filter is provided in the method
documentation.
// generateIOFilter.
// String* server : the ip address (ipv4) of the server
for the connection being monitored
// String* client : the ip address (ipv4) of the client
for the connection being monitored
// String* port : the port number used for the
connection being monitored
// Updates the String* io_filter by adding the details
of the connection passed in.
// EG. io_filter = "((ip host 192.168.162.1 or ip host
192.168.162.2) and port 5566)"
void M_Ethernet_Bus::generateIOFilter( String* server,
String* client, String* port )
{
// make an array of the filter tokens. Note that we
have included spaces.
String* tokens[] = {" ((ip host ", server, " or ip
host ", client, ") and", " port ", port, ")"};
// concatenate all the tokens into one string.
String* io_filter_base = String::Concat(tokens);
// ensure the filter string is initialised and if it
is, then concatenate to support multiple
// connections.
if(!io_filter)
io_filter = "";
else
io_filter = String::Concat(io_filter, " or");
// finally put it all together.
io_filter = String::Concat(io_filter,
io_filter_base);
}
It is not my understanding that using this filter will
prevent the subsequent fragments being received by the
packet_handler(...) method, please correct me if this is wrong. When
using WireShark (and debugging my code simultaneously) I can see the
fragments being received in order, yet they are never passed to the
packet_handler(...) method.
Thanks for taking the time to peruse this with me.
Regards, Sam.
-----Original Message-----
From: winpcap-users-bounces at winpcap.org
[mailto:winpcap-users-bounces at winpcap.org] On Behalf Of Gianluca Varenni
Sent: Friday, April 27, 2007 4:30 PM
To: winpcap-users at winpcap.org
Subject: Re: [Winpcap-users] Problem
Reassembling IP Packets,missing packet-fragments!?
----- Original Message -----
From: Sam.Fielden at l-3com.com
To: winpcap-users at winpcap.org
Sent: Wednesday, April 18, 2007 12:48 PM
Subject: [Winpcap-users] Problem
Reassembling IP Packets,missing packet-fragments!?
I have written code to reassemble
fragmented IP messages and I have a system that is generating fragmented
(Ethernet) messages which I can successfully capture using WireShark
(all fragments!). However my "packet_handler(...)" method never receives
the subsequent fragments, only ever the first (with "ip_header.flags" ==
1 and "ip_header.offset" == 0).
As an example every time I enter the
"packet_handler(...)" method the "ip_header.identification" always
increments by a value of 1. It is my understanding that fragmented IP
packets have the same "ip_header.identification" value so this can be
used for reassembling the complete message.
I feel like I'm missing something
obvious, do I need to 'request' the next fragment from the WinPCap
interface or should it arrive, at my "packet_handler(...)" method, in
sequence like it does in WireShark??
Are you using a capture filter for that?
Wireshark uses winpcap to capture packets, you do not need to request
any subsequent frame in an IP fragment. WinPcap has no concept of IP
fragments, it just captures ethernet (or any other link layer) packets.
Sam Fielden
Software Engineer
Beca Applied Technologies Ltd
10001 Jack Finney Blvd
Greenville, Texas, 75402
Bldg. 208. CBN011
Ph. (903) 457-4767
Only Bikers understand why dogs love to
stick their heads out car windows.
________________________________
_______________________________________________
Winpcap-users mailing list
Winpcap-users at winpcap.org
https://www.winpcap.org/mailman/listinfo/winpcap-users
________________________________
_______________________________________________
Winpcap-users mailing list
Winpcap-users at winpcap.org
https://www.winpcap.org/mailman/listinfo/winpcap-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winpcap.org/pipermail/winpcap-users/attachments/20070430/ead9716d/attachment.htm
More information about the Winpcap-users
mailing list