Sent again, as I don't receive the copy from the list.
 
From: [email protected]
To: [email protected]
Subject: FW: Service crash after update to WinPcap networking
Date: Fri, 28 Mar 2014 12:14:08 +0000




The other server has just crashed. So the problem is not restricted to a single 
machine.
We are thinking about updating HP NIC drivers and firmware (dated January 
2011), hoping that an outdated driver/firmware could make WinPcap more prone to 
participate in these crashes.
 
There is another strange behaviour: we have applied a safety mechanism to 
detect malformed packets; it compares the len property of the pktHeader 
returned by WinPcap to the datagramSize derived from the IP datagram header. If 
they don't match, a log message is written, and the packet is discarded.
 
                    Public Const EthernetHeaderSize = 14
                    Public Const BasicIPHeaderSize = 20
                    Private _MaxDatagramSize As Integer = 65535
                    Private _MaxEthernetPacketSize As Integer = 
EthernetHeaderSize + Me._MaxDatagramSize
                    ...
                    Dim errBuf As New 
StringBuilder(WinPcap.Constants.PCAP_ERRBUF_SIZE)
                    Dim session = WinPcap.Driver.pcap_open(Me._DeviceName, 
Me._MaxEthernetPacketSize, WinPcap.Constants.PCAP_OPENFLAG_MAX_RESPONSIVENESS + 
WinPcap.Constants.PCAP_OPENFLAG_NOCAPTURE_LOCAL, 1, IntPtr.Zero, errBuf)
                    ...
                    While Not cancellationTokenSource.IsCancellationRequested
                        Dim pktHeader As IntPtr = IntPtr.Zero
                        Dim pktData As IntPtr = IntPtr.Zero
                        Select Case WinPcap.Driver.pcap_next_ex(session, 
pktHeader, pktData)
                            Case 0
                                Continue While
                            Case Is < 0
                                Throw New 
Exception(WinPcap.Driver.pcap_geterr(session))
                        End Select
                        Dim header = 
DirectCast(Marshal.PtrToStructure(pktHeader, GetType(WinPcap.pcap_pkthdr)), 
WinPcap.pcap_pkthdr)
                        If header.len > EthernetHeaderSize + BasicIPHeaderSize 
Then 'Ethernet header + IPv4 header (without options)
                            Dim datagramSize As UShort = 
Marshal.ReadByte(pktData, EthernetHeaderSize + 2)
                            datagramSize <<= 8
                            datagramSize = datagramSize Or 
Marshal.ReadByte(pktData, EthernetHeaderSize + 3)
                            If header.len >= EthernetHeaderSize + datagramSize 
AndAlso datagramSize <= Me._MaxDatagramSize Then
    'Process the packet
                                ...
                            Else
                                Logging.Write(TraceEventType.Verbose, 
"Discarded packet with datagramSize {0} and header.len {1}", datagramSize, 
header.len)
                            End If
                        End If
                    End While
 
Well, it is happening, very significantly I would say.
 
My questions are:
-- Is it common that packets are this malformed?
-- Is my understanding right that in PCAP_OPENFLAG_MAX_RESPONSIVENESS mode 
WinPcap delivers complete datagrams to the application (if the internal buffer 
is big enough)? I'm not precluding IP fragmentation, rather I wonder whether 
individual datagrams (be they fragments or not) are delivered as indisivible 
units to the application. Otherwise, the behaviour we are experiencing could be 
the result of WinPcap delivering a portion of a datagram, not the whole 
datagram; but it would be a burden for the application to aggregate the 
portions.
 
Thank you very much.
 
J.M.
 
From: [email protected]
To: [email protected]
Subject: Service crash after update to WinPcap networking
Date: Fri, 28 Mar 2014 10:07:37 +0000




Hi,
 
We have updated the raw socket networking subsystem of a Windows service to 
WinPcap, with the following architecture:
-- One thread continuously captures on its own pcap_t calling pcap_next_ex.
-- Several threads send packets concurrently over the same interface, but each 
one with it own private pcap_t obtained from pcap_open. These threads call 
pcap_sendpacket.
 
Since the update, the service crashes intermittently, although only one of the 
two servers in a redundant cluster exhibit the problem.
We are logging the errors produced by WinPcap. For that, after pcap_sendpacket 
returning a negative result we call pcap_geterr.
 
Just before the crash, the service logs (pcap_geterr result):
 
send error: PacketSendPacket failed
 
In EventViewer, this is the detail of the crash:
 
Faulting application name: ...
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec4aa8e
Exception code: 0xc0000374
Fault offset: 0x00000000000c40f2
Faulting process id: 0x1d64
Faulting application start time: 0x01cf4a53bf7cfe86
Faulting application path: ...
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 0e886882-b656-11e3-b6bb-e4115be757a8
 
The OS is Windows Server 2008 R2 64 bits.
The WinPcap version is 4.1.3.
 
The question is: has someone observed this problem?
 
Thank you very much.
 
Regards,
J.M.
                                                                                
                                          
_______________________________________________
Winpcap-users mailing list
[email protected]
https://www.winpcap.org/mailman/listinfo/winpcap-users

Reply via email to