Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
P
Pcap-Net
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Pcap-Net
Commits
6a6df7e5
Commit
6a6df7e5
authored
Jul 02, 2009
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
--no commit message
--no commit message
parent
9d657b7a
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
195 additions
and
77 deletions
+195
-77
Packet.cs
PcapDotNet/src/BPacket/Packet.cs
+24
-1
Program.cs
PcapDotNet/src/PcapDotNet.Console/Program.cs
+17
-17
LivePacketDeviceTests.cs
PcapDotNet/src/PcapDotNet.Core.Test/LivePacketDeviceTests.cs
+92
-17
PacketCommunicator.cpp
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.cpp
+23
-23
PacketCommunicator.h
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.h
+17
-16
PacketTotalStatistics.cpp
PcapDotNet/src/PcapDotNet.Core/PacketTotalStatistics.cpp
+16
-0
PacketTotalStatistics.h
PcapDotNet/src/PcapDotNet.Core/PacketTotalStatistics.h
+4
-2
Timestamp.cpp
PcapDotNet/src/PcapDotNet.Core/Timestamp.cpp
+2
-1
No files found.
PcapDotNet/src/BPacket/Packet.cs
View file @
6a6df7e5
...
@@ -5,7 +5,7 @@ using System.Text;
...
@@ -5,7 +5,7 @@ using System.Text;
namespace
Packets
namespace
Packets
{
{
public
class
Packet
public
class
Packet
:
IEquatable
<
Packet
>
{
{
public
Packet
(
byte
[]
data
,
DateTime
timestamp
,
IDataLink
dataLink
)
public
Packet
(
byte
[]
data
,
DateTime
timestamp
,
IDataLink
dataLink
)
{
{
...
@@ -14,6 +14,11 @@ namespace Packets
...
@@ -14,6 +14,11 @@ namespace Packets
_dataLink
=
dataLink
;
_dataLink
=
dataLink
;
}
}
public
byte
this
[
int
offset
]
{
get
{
return
_data
[
offset
];
}
}
public
int
Length
public
int
Length
{
{
get
{
return
_data
.
Length
;
}
get
{
return
_data
.
Length
;
}
...
@@ -34,6 +39,24 @@ namespace Packets
...
@@ -34,6 +39,24 @@ namespace Packets
get
{
return
_data
;
}
get
{
return
_data
;
}
}
}
public
bool
Equals
(
Packet
other
)
{
if
(
Length
!=
other
.
Length
)
return
false
;
for
(
int
i
=
0
;
i
!=
Length
;
++
i
)
{
if
(
this
[
i
]
!=
other
[
i
])
return
false
;
}
return
true
;
}
public
override
bool
Equals
(
object
obj
)
{
return
Equals
(
obj
as
Packet
);
}
private
readonly
byte
[]
_data
;
private
readonly
byte
[]
_data
;
private
readonly
DateTime
_timestamp
;
private
readonly
DateTime
_timestamp
;
private
readonly
IDataLink
_dataLink
;
private
readonly
IDataLink
_dataLink
;
...
...
PcapDotNet/src/PcapDotNet.Console/Program.cs
View file @
6a6df7e5
...
@@ -90,19 +90,19 @@ namespace WinPcapDotNet.Console
...
@@ -90,19 +90,19 @@ namespace WinPcapDotNet.Console
using
(
PacketCommunicator
deviceHandler
=
device
.
Open
())
using
(
PacketCommunicator
deviceHandler
=
device
.
Open
())
{
{
deviceHandler
.
SetFilter
(
filter
);
deviceHandler
.
SetFilter
(
filter
);
deviceHandler
.
Mode
=
DeviceHandle
rMode
.
Statistics
;
deviceHandler
.
Mode
=
PacketCommunicato
rMode
.
Statistics
;
for
(
int
i
=
0
;
i
!=
10
;
++
i
)
for
(
int
i
=
0
;
i
!=
10
;
++
i
)
{
{
PacketSampleStatistics
statistics
;
PacketSampleStatistics
statistics
;
DeviceHandler
Result
result
=
deviceHandler
.
GetNextStatistics
(
out
statistics
);
PacketCommunicatorReceive
Result
result
=
deviceHandler
.
GetNextStatistics
(
out
statistics
);
switch
(
result
)
switch
(
result
)
{
{
case
DeviceHandler
Result
.
Ok
:
case
PacketCommunicatorReceive
Result
.
Ok
:
break
;
break
;
case
DeviceHandler
Result
.
Timeout
:
case
PacketCommunicatorReceive
Result
.
Timeout
:
continue
;
continue
;
case
DeviceHandler
Result
.
Eof
:
case
PacketCommunicatorReceive
Result
.
Eof
:
continue
;
continue
;
}
}
...
@@ -121,14 +121,14 @@ namespace WinPcapDotNet.Console
...
@@ -121,14 +121,14 @@ namespace WinPcapDotNet.Console
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
{
{
Packet
packet
;
Packet
packet
;
DeviceHandler
Result
result
=
offlineHandler
.
GetPacket
(
out
packet
);
PacketCommunicatorReceive
Result
result
=
offlineHandler
.
GetPacket
(
out
packet
);
switch
(
result
)
switch
(
result
)
{
{
case
DeviceHandler
Result
.
Ok
:
case
PacketCommunicatorReceive
Result
.
Ok
:
break
;
break
;
case
DeviceHandler
Result
.
Timeout
:
case
PacketCommunicatorReceive
Result
.
Timeout
:
continue
;
continue
;
case
DeviceHandler
Result
.
Eof
:
case
PacketCommunicatorReceive
Result
.
Eof
:
continue
;
continue
;
}
}
...
@@ -153,14 +153,14 @@ namespace WinPcapDotNet.Console
...
@@ -153,14 +153,14 @@ namespace WinPcapDotNet.Console
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
{
{
Packet
packet
;
Packet
packet
;
DeviceHandler
Result
result
=
offlineHandler
.
GetPacket
(
out
packet
);
PacketCommunicatorReceive
Result
result
=
offlineHandler
.
GetPacket
(
out
packet
);
switch
(
result
)
switch
(
result
)
{
{
case
DeviceHandler
Result
.
Ok
:
case
PacketCommunicatorReceive
Result
.
Ok
:
break
;
break
;
case
DeviceHandler
Result
.
Timeout
:
case
PacketCommunicatorReceive
Result
.
Timeout
:
continue
;
continue
;
case
DeviceHandler
Result
.
Eof
:
case
PacketCommunicatorReceive
Result
.
Eof
:
continue
;
continue
;
}
}
...
@@ -179,14 +179,14 @@ namespace WinPcapDotNet.Console
...
@@ -179,14 +179,14 @@ namespace WinPcapDotNet.Console
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
{
{
Packet
packet
;
Packet
packet
;
DeviceHandler
Result
result
=
liveHandler
.
GetPacket
(
out
packet
);
PacketCommunicatorReceive
Result
result
=
liveHandler
.
GetPacket
(
out
packet
);
switch
(
result
)
switch
(
result
)
{
{
case
DeviceHandler
Result
.
Ok
:
case
PacketCommunicatorReceive
Result
.
Ok
:
break
;
break
;
case
DeviceHandler
Result
.
Timeout
:
case
PacketCommunicatorReceive
Result
.
Timeout
:
continue
;
continue
;
case
DeviceHandler
Result
.
Eof
:
case
PacketCommunicatorReceive
Result
.
Eof
:
continue
;
continue
;
}
}
...
...
PcapDotNet/src/PcapDotNet.Core.Test/LivePacketDeviceTests.cs
View file @
6a6df7e5
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Threading
;
using
System.Threading
;
using
Packets
;
using
Packets
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
...
@@ -66,9 +67,9 @@ namespace PcapDotNet.Core.Test
...
@@ -66,9 +67,9 @@ namespace PcapDotNet.Core.Test
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
int
NumPacketsToSend
=
10
;
const
int
NumPacketsToSend
=
10
;
using
(
PacketCommunicator
deviceHandle
r
=
OpenLiveDevice
())
using
(
PacketCommunicator
communicato
r
=
OpenLiveDevice
())
{
{
deviceHandle
r
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
DestinationMac
);
communicato
r
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
DestinationMac
);
Packet
sentPacket
=
PacketBuilder
.
Ethernet
(
DateTime
.
Now
,
Packet
sentPacket
=
PacketBuilder
.
Ethernet
(
DateTime
.
Now
,
new
MacAddress
(
SourceMac
),
new
MacAddress
(
SourceMac
),
...
@@ -79,20 +80,94 @@ namespace PcapDotNet.Core.Test
...
@@ -79,20 +80,94 @@ namespace PcapDotNet.Core.Test
DateTime
startSendingTime
=
DateTime
.
Now
;
DateTime
startSendingTime
=
DateTime
.
Now
;
for
(
int
i
=
0
;
i
!=
NumPacketsToSend
;
++
i
)
for
(
int
i
=
0
;
i
!=
NumPacketsToSend
;
++
i
)
deviceHandle
r
.
SendPacket
(
sentPacket
);
communicato
r
.
SendPacket
(
sentPacket
);
DateTime
endSendingTime
=
DateTime
.
Now
;
DateTime
endSendingTime
=
DateTime
.
Now
;
Packet
packet
;
Packet
packet
;
DeviceHandlerResult
result
=
deviceHandle
r
.
GetPacket
(
out
packet
);
PacketCommunicatorReceiveResult
result
=
communicato
r
.
GetPacket
(
out
packet
);
Assert
.
AreEqual
(
DeviceHandler
Result
.
Ok
,
result
);
Assert
.
AreEqual
(
PacketCommunicatorReceive
Result
.
Ok
,
result
);
Assert
.
AreEqual
<
uint
>(
NumPacketsToSend
,
deviceHandle
r
.
TotalStatistics
.
PacketsCaptured
);
Assert
.
AreEqual
<
uint
>(
NumPacketsToSend
,
communicato
r
.
TotalStatistics
.
PacketsCaptured
);
Assert
.
AreEqual
(
sentPacket
.
Length
,
packet
.
Length
);
Assert
.
AreEqual
(
sentPacket
.
Length
,
packet
.
Length
);
MoreAssert
.
IsInRange
(
startSendingTime
-
TimeSpan
.
FromSeconds
(
1
),
endSendingTime
+
TimeSpan
.
FromSeconds
(
30
),
packet
.
Timestamp
);
MoreAssert
.
IsInRange
(
startSendingTime
-
TimeSpan
.
FromSeconds
(
1
),
endSendingTime
+
TimeSpan
.
FromSeconds
(
30
),
packet
.
Timestamp
);
}
}
}
}
[
TestMethod
]
public
void
DumpPacketsTest
()
{
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
string
dumpFilename
=
Path
.
GetTempPath
()
+
@"dump.pcap"
;
Packet
expectedPacket
=
PacketBuilder
.
Ethernet
(
DateTime
.
Now
,
new
MacAddress
(
SourceMac
),
new
MacAddress
(
DestinationMac
),
EthernetType
.
IpV4
,
new
Datagram
(
new
byte
[
10
],
0
,
10
));
using
(
PacketCommunicator
communicator
=
OpenLiveDevice
())
{
using
(
PacketDumpFile
dumpFile
=
communicator
.
OpenDump
(
dumpFilename
))
{
dumpFile
.
Dump
(
expectedPacket
);
}
}
using
(
PacketCommunicator
communicator
=
new
OfflinePacketDevice
(
dumpFilename
).
Open
())
{
communicator
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
DestinationMac
);
Packet
actualPacket
;
communicator
.
GetPacket
(
out
actualPacket
);
Assert
.
AreEqual
(
expectedPacket
,
actualPacket
);
MoreAssert
.
IsInRange
(
expectedPacket
.
Timestamp
.
AddSeconds
(-
1
),
expectedPacket
.
Timestamp
.
AddSeconds
(
1
),
actualPacket
.
Timestamp
);
}
}
[
TestMethod
]
public
void
ReceiveManyPacketsTest
()
{
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
int
NumPacketsToSend
=
100
;
using
(
PacketCommunicator
communicator
=
OpenLiveDevice
())
{
communicator
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
DestinationMac
);
Packet
sentPacket
=
PacketBuilder
.
Ethernet
(
DateTime
.
Now
,
new
MacAddress
(
SourceMac
),
new
MacAddress
(
DestinationMac
),
EthernetType
.
IpV4
,
new
Datagram
(
new
byte
[
10
],
0
,
10
));
PacketCommunicatorReceiveResult
result
=
PacketCommunicatorReceiveResult
.
None
;
int
numPacketsGot
=
0
;
Thread
thread
=
new
Thread
(
delegate
()
{
result
=
communicator
.
GetPackets
(
NumPacketsToSend
,
delegate
(
Packet
packet
)
{
Assert
.
AreEqual
(
sentPacket
,
packet
);
++
numPacketsGot
;
});
});
thread
.
Start
();
for
(
int
i
=
0
;
i
!=
NumPacketsToSend
;
++
i
)
communicator
.
SendPacket
(
sentPacket
);
if
(!
thread
.
Join
(
TimeSpan
.
FromSeconds
(
5
)))
thread
.
Abort
();
Assert
.
AreEqual
(
NumPacketsToSend
,
numPacketsGot
);
Assert
.
AreEqual
(
PacketCommunicatorReceiveResult
.
Ok
,
result
);
}
}
private
static
PacketCommunicator
OpenLiveDevice
()
private
static
PacketCommunicator
OpenLiveDevice
()
{
{
IList
<
LivePacketDevice
>
devices
=
LivePacketDevice
.
AllLocalMachine
;
IList
<
LivePacketDevice
>
devices
=
LivePacketDevice
.
AllLocalMachine
;
...
@@ -103,22 +178,22 @@ namespace PcapDotNet.Core.Test
...
@@ -103,22 +178,22 @@ namespace PcapDotNet.Core.Test
Assert
.
AreEqual
(
1
,
device
.
Addresses
.
Count
);
Assert
.
AreEqual
(
1
,
device
.
Addresses
.
Count
);
DeviceAddress
address
=
device
.
Addresses
[
0
];
DeviceAddress
address
=
device
.
Addresses
[
0
];
Assert
.
AreEqual
(
"Address: INET 10.0.0.2 Netmask: INET 255.0.0.0 Broadcast: INET 255.255.255.255"
,
address
.
ToString
());
Assert
.
AreEqual
(
"Address: INET 10.0.0.2 Netmask: INET 255.0.0.0 Broadcast: INET 255.255.255.255"
,
address
.
ToString
());
PacketCommunicator
deviceHandle
r
=
device
.
Open
();
PacketCommunicator
communicato
r
=
device
.
Open
();
try
try
{
{
Assert
.
AreEqual
(
DataLinkKind
.
Ethernet
,
deviceHandle
r
.
DataLink
.
Kind
);
Assert
.
AreEqual
(
DataLinkKind
.
Ethernet
,
communicato
r
.
DataLink
.
Kind
);
Assert
.
AreEqual
(
"EN10MB (Ethernet)"
,
deviceHandle
r
.
DataLink
.
ToString
());
Assert
.
AreEqual
(
"EN10MB (Ethernet)"
,
communicato
r
.
DataLink
.
ToString
());
Assert
.
AreEqual
(
deviceHandler
.
DataLink
,
new
PcapDataLink
(
deviceHandle
r
.
DataLink
.
Name
));
Assert
.
AreEqual
(
communicator
.
DataLink
,
new
PcapDataLink
(
communicato
r
.
DataLink
.
Name
));
Assert
.
IsTrue
(
deviceHandle
r
.
IsFileSystemByteOrder
);
Assert
.
IsTrue
(
communicato
r
.
IsFileSystemByteOrder
);
Assert
.
AreEqual
(
DeviceHandlerMode
.
Capture
,
deviceHandle
r
.
Mode
);
Assert
.
AreEqual
(
PacketCommunicatorMode
.
Capture
,
communicato
r
.
Mode
);
Assert
.
IsFalse
(
deviceHandle
r
.
NonBlocking
);
Assert
.
IsFalse
(
communicato
r
.
NonBlocking
);
Assert
.
AreEqual
(
PacketDevice
.
DefaultSnapshotLength
,
deviceHandle
r
.
SnapshotLength
);
Assert
.
AreEqual
(
PacketDevice
.
DefaultSnapshotLength
,
communicato
r
.
SnapshotLength
);
Assert
.
AreEqual
(
new
PacketTotalStatistics
(
0
,
0
,
0
,
0
),
deviceHandle
r
.
TotalStatistics
);
Assert
.
AreEqual
(
new
PacketTotalStatistics
(
0
,
0
,
0
,
0
),
communicato
r
.
TotalStatistics
);
return
deviceHandle
r
;
return
communicato
r
;
}
}
catch
(
Exception
)
catch
(
Exception
)
{
{
deviceHandle
r
.
Dispose
();
communicato
r
.
Dispose
();
throw
;
throw
;
}
}
}
}
...
...
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.cpp
View file @
6a6df7e5
...
@@ -108,12 +108,12 @@ PacketTotalStatistics^ PacketCommunicator::TotalStatistics::get()
...
@@ -108,12 +108,12 @@ PacketTotalStatistics^ PacketCommunicator::TotalStatistics::get()
}
}
DeviceHandle
rMode
PacketCommunicator
::
Mode
::
get
()
PacketCommunicato
rMode
PacketCommunicator
::
Mode
::
get
()
{
{
return
_mode
;
return
_mode
;
}
}
void
PacketCommunicator
::
Mode
::
set
(
DeviceHandle
rMode
value
)
void
PacketCommunicator
::
Mode
::
set
(
PacketCommunicato
rMode
value
)
{
{
if
(
pcap_setmode
(
_pcapDescriptor
,
safe_cast
<
int
>
(
value
))
<
0
)
if
(
pcap_setmode
(
_pcapDescriptor
,
safe_cast
<
int
>
(
value
))
<
0
)
throw
BuildInvalidOperation
(
"Error setting mode "
+
value
.
ToString
());
throw
BuildInvalidOperation
(
"Error setting mode "
+
value
.
ToString
());
...
@@ -136,15 +136,15 @@ void PacketCommunicator::NonBlocking::set(bool value)
...
@@ -136,15 +136,15 @@ void PacketCommunicator::NonBlocking::set(bool value)
throw
gcnew
InvalidOperationException
(
"Error setting NonBlocking to "
+
value
.
ToString
());
throw
gcnew
InvalidOperationException
(
"Error setting NonBlocking to "
+
value
.
ToString
());
}
}
DeviceHandler
Result
PacketCommunicator
::
GetPacket
([
Out
]
Packet
^%
packet
)
PacketCommunicatorReceive
Result
PacketCommunicator
::
GetPacket
([
Out
]
Packet
^%
packet
)
{
{
AssertMode
(
DeviceHandle
rMode
::
Capture
);
AssertMode
(
PacketCommunicato
rMode
::
Capture
);
pcap_pkthdr
*
packetHeader
;
pcap_pkthdr
*
packetHeader
;
const
unsigned
char
*
packetData
;
const
unsigned
char
*
packetData
;
DeviceHandler
Result
result
=
RunPcapNextEx
(
&
packetHeader
,
&
packetData
);
PacketCommunicatorReceive
Result
result
=
RunPcapNextEx
(
&
packetHeader
,
&
packetData
);
if
(
result
!=
DeviceHandler
Result
::
Ok
)
if
(
result
!=
PacketCommunicatorReceive
Result
::
Ok
)
{
{
packet
=
nullptr
;
packet
=
nullptr
;
return
result
;
return
result
;
...
@@ -154,9 +154,9 @@ DeviceHandlerResult PacketCommunicator::GetPacket([Out] Packet^% packet)
...
@@ -154,9 +154,9 @@ DeviceHandlerResult PacketCommunicator::GetPacket([Out] Packet^% packet)
return
result
;
return
result
;
}
}
DeviceHandler
Result
PacketCommunicator
::
GetSomePackets
(
int
maxPackets
,
HandlePacket
^
callBack
,
[
Out
]
int
%
numPacketsGot
)
PacketCommunicatorReceive
Result
PacketCommunicator
::
GetSomePackets
(
int
maxPackets
,
HandlePacket
^
callBack
,
[
Out
]
int
%
numPacketsGot
)
{
{
AssertMode
(
DeviceHandle
rMode
::
Capture
);
AssertMode
(
PacketCommunicato
rMode
::
Capture
);
PacketHandler
^
packetHandler
=
gcnew
PacketHandler
(
callBack
,
DataLink
);
PacketHandler
^
packetHandler
=
gcnew
PacketHandler
(
callBack
,
DataLink
);
HandlerDelegate
^
packetHandlerDelegate
=
gcnew
HandlerDelegate
(
packetHandler
,
&
PacketHandler
::
Handle
);
HandlerDelegate
^
packetHandlerDelegate
=
gcnew
HandlerDelegate
(
packetHandler
,
&
PacketHandler
::
Handle
);
...
@@ -170,13 +170,13 @@ DeviceHandlerResult PacketCommunicator::GetSomePackets(int maxPackets, HandlePac
...
@@ -170,13 +170,13 @@ DeviceHandlerResult PacketCommunicator::GetSomePackets(int maxPackets, HandlePac
if
(
numPacketsGot
==
-
1
)
if
(
numPacketsGot
==
-
1
)
throw
BuildInvalidOperation
(
"Failed reading from device"
);
throw
BuildInvalidOperation
(
"Failed reading from device"
);
if
(
numPacketsGot
==
-
2
)
if
(
numPacketsGot
==
-
2
)
return
DeviceHandler
Result
::
BreakLoop
;
return
PacketCommunicatorReceive
Result
::
BreakLoop
;
return
DeviceHandler
Result
::
Ok
;
return
PacketCommunicatorReceive
Result
::
Ok
;
}
}
DeviceHandler
Result
PacketCommunicator
::
GetPackets
(
int
numPackets
,
HandlePacket
^
callBack
)
PacketCommunicatorReceive
Result
PacketCommunicator
::
GetPackets
(
int
numPackets
,
HandlePacket
^
callBack
)
{
{
AssertMode
(
DeviceHandle
rMode
::
Capture
);
AssertMode
(
PacketCommunicato
rMode
::
Capture
);
PacketHandler
^
packetHandler
=
gcnew
PacketHandler
(
callBack
,
DataLink
);
PacketHandler
^
packetHandler
=
gcnew
PacketHandler
(
callBack
,
DataLink
);
HandlerDelegate
^
packetHandlerDelegate
=
gcnew
HandlerDelegate
(
packetHandler
,
&
PacketHandler
::
Handle
);
HandlerDelegate
^
packetHandlerDelegate
=
gcnew
HandlerDelegate
(
packetHandler
,
&
PacketHandler
::
Handle
);
...
@@ -186,19 +186,19 @@ DeviceHandlerResult PacketCommunicator::GetPackets(int numPackets, HandlePacket^
...
@@ -186,19 +186,19 @@ DeviceHandlerResult PacketCommunicator::GetPackets(int numPackets, HandlePacket^
if
(
result
==
-
1
)
if
(
result
==
-
1
)
throw
BuildInvalidOperation
(
"Failed reading from device"
);
throw
BuildInvalidOperation
(
"Failed reading from device"
);
if
(
result
==
-
2
)
if
(
result
==
-
2
)
return
DeviceHandler
Result
::
BreakLoop
;
return
PacketCommunicatorReceive
Result
::
BreakLoop
;
return
DeviceHandler
Result
::
Ok
;
return
PacketCommunicatorReceive
Result
::
Ok
;
}
}
DeviceHandler
Result
PacketCommunicator
::
GetNextStatistics
([
Out
]
PacketSampleStatistics
^%
statistics
)
PacketCommunicatorReceive
Result
PacketCommunicator
::
GetNextStatistics
([
Out
]
PacketSampleStatistics
^%
statistics
)
{
{
AssertMode
(
DeviceHandle
rMode
::
Statistics
);
AssertMode
(
PacketCommunicato
rMode
::
Statistics
);
pcap_pkthdr
*
packetHeader
;
pcap_pkthdr
*
packetHeader
;
const
unsigned
char
*
packetData
;
const
unsigned
char
*
packetData
;
DeviceHandler
Result
result
=
RunPcapNextEx
(
&
packetHeader
,
&
packetData
);
PacketCommunicatorReceive
Result
result
=
RunPcapNextEx
(
&
packetHeader
,
&
packetData
);
if
(
result
!=
DeviceHandler
Result
::
Ok
)
if
(
result
!=
PacketCommunicatorReceive
Result
::
Ok
)
{
{
statistics
=
nullptr
;
statistics
=
nullptr
;
return
result
;
return
result
;
...
@@ -279,25 +279,25 @@ PacketSampleStatistics^ PacketCommunicator::CreateStatistics(const pcap_pkthdr&
...
@@ -279,25 +279,25 @@ PacketSampleStatistics^ PacketCommunicator::CreateStatistics(const pcap_pkthdr&
return
gcnew
PacketSampleStatistics
(
timestamp
,
acceptedPackets
,
acceptedBytes
);
return
gcnew
PacketSampleStatistics
(
timestamp
,
acceptedPackets
,
acceptedBytes
);
}
}
DeviceHandler
Result
PacketCommunicator
::
RunPcapNextEx
(
pcap_pkthdr
**
packetHeader
,
const
unsigned
char
**
packetData
)
PacketCommunicatorReceive
Result
PacketCommunicator
::
RunPcapNextEx
(
pcap_pkthdr
**
packetHeader
,
const
unsigned
char
**
packetData
)
{
{
int
result
=
pcap_next_ex
(
_pcapDescriptor
,
packetHeader
,
packetData
);
int
result
=
pcap_next_ex
(
_pcapDescriptor
,
packetHeader
,
packetData
);
switch
(
result
)
switch
(
result
)
{
{
case
-
2
:
case
-
2
:
return
DeviceHandler
Result
::
Eof
;
return
PacketCommunicatorReceive
Result
::
Eof
;
case
-
1
:
case
-
1
:
throw
PcapError
::
BuildInvalidOperation
(
"Failed reading from device"
,
_pcapDescriptor
);
throw
PcapError
::
BuildInvalidOperation
(
"Failed reading from device"
,
_pcapDescriptor
);
case
0
:
case
0
:
return
DeviceHandler
Result
::
Timeout
;
return
PacketCommunicatorReceive
Result
::
Timeout
;
case
1
:
case
1
:
return
DeviceHandler
Result
::
Ok
;
return
PacketCommunicatorReceive
Result
::
Ok
;
default
:
default
:
throw
gcnew
InvalidOperationException
(
"Result value "
+
result
.
ToString
()
+
" is undefined"
);
throw
gcnew
InvalidOperationException
(
"Result value "
+
result
.
ToString
()
+
" is undefined"
);
}
}
}
}
void
PacketCommunicator
::
AssertMode
(
DeviceHandle
rMode
mode
)
void
PacketCommunicator
::
AssertMode
(
PacketCommunicato
rMode
mode
)
{
{
if
(
Mode
!=
mode
)
if
(
Mode
!=
mode
)
throw
gcnew
InvalidOperationException
(
"Wrong Mode. Must be in mode "
+
mode
.
ToString
()
+
" and not in mode "
+
Mode
.
ToString
());
throw
gcnew
InvalidOperationException
(
"Wrong Mode. Must be in mode "
+
mode
.
ToString
()
+
" and not in mode "
+
Mode
.
ToString
());
...
...
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.h
View file @
6a6df7e5
...
@@ -11,15 +11,16 @@
...
@@ -11,15 +11,16 @@
namespace
PcapDotNet
{
namespace
Core
namespace
PcapDotNet
{
namespace
Core
{
{
public
enum
class
DeviceHandler
Result
:
int
public
enum
class
PacketCommunicatorReceive
Result
:
int
{
{
Ok
,
// if the packet has been read without problems
Ok
,
// if the packet has been read without problems
Timeout
,
// if the timeout set with Open() has elapsed.
Timeout
,
// if the timeout set with Open() has elapsed.
Eof
,
// if EOF was reached reading from an offline capture
Eof
,
// if EOF was reached reading from an offline capture
BreakLoop
//
BreakLoop
,
//
None
};
};
public
enum
class
DeviceHandle
rMode
:
int
public
enum
class
PacketCommunicato
rMode
:
int
{
{
Capture
=
0x0
,
// Capture working mode.
Capture
=
0x0
,
// Capture working mode.
Statistics
=
0x1
,
// Statistical working mode.
Statistics
=
0x1
,
// Statistical working mode.
...
@@ -69,10 +70,10 @@ namespace PcapDotNet { namespace Core
...
@@ -69,10 +70,10 @@ namespace PcapDotNet { namespace Core
PacketTotalStatistics
^
get
();
PacketTotalStatistics
^
get
();
}
}
property
DeviceHandle
rMode
Mode
property
PacketCommunicato
rMode
Mode
{
{
DeviceHandle
rMode
get
();
PacketCommunicato
rMode
get
();
void
set
(
DeviceHandle
rMode
value
);
void
set
(
PacketCommunicato
rMode
value
);
}
}
property
bool
NonBlocking
property
bool
NonBlocking
...
@@ -82,12 +83,12 @@ namespace PcapDotNet { namespace Core
...
@@ -82,12 +83,12 @@ namespace PcapDotNet { namespace Core
}
}
delegate
void
HandlePacket
(
Packets
::
Packet
^
packet
);
delegate
void
HandlePacket
(
Packets
::
Packet
^
packet
);
DeviceHandler
Result
GetPacket
([
System
::
Runtime
::
InteropServices
::
Out
]
Packets
::
Packet
^%
packet
);
PacketCommunicatorReceive
Result
GetPacket
([
System
::
Runtime
::
InteropServices
::
Out
]
Packets
::
Packet
^%
packet
);
DeviceHandler
Result
GetSomePackets
(
int
maxPackets
,
HandlePacket
^
callBack
,
[
System
::
Runtime
::
InteropServices
::
Out
]
int
%
numPacketsGot
);
PacketCommunicatorReceive
Result
GetSomePackets
(
int
maxPackets
,
HandlePacket
^
callBack
,
[
System
::
Runtime
::
InteropServices
::
Out
]
int
%
numPacketsGot
);
DeviceHandler
Result
GetPackets
(
int
numPackets
,
HandlePacket
^
callBack
);
PacketCommunicatorReceive
Result
GetPackets
(
int
numPackets
,
HandlePacket
^
callBack
);
delegate
void
HandleStatistics
(
PacketSampleStatistics
^
statistics
);
delegate
void
HandleStatistics
(
PacketSampleStatistics
^
statistics
);
DeviceHandler
Result
GetNextStatistics
([
System
::
Runtime
::
InteropServices
::
Out
]
PacketSampleStatistics
^%
statistics
);
PacketCommunicatorReceive
Result
GetNextStatistics
([
System
::
Runtime
::
InteropServices
::
Out
]
PacketSampleStatistics
^%
statistics
);
void
SendPacket
(
Packets
::
Packet
^
packet
);
void
SendPacket
(
Packets
::
Packet
^
packet
);
void
Transmit
(
PacketSendQueue
^
sendQueue
,
bool
isSync
);
void
Transmit
(
PacketSendQueue
^
sendQueue
,
bool
isSync
);
...
@@ -104,12 +105,12 @@ namespace PcapDotNet { namespace Core
...
@@ -104,12 +105,12 @@ namespace PcapDotNet { namespace Core
static
Packets
::
Packet
^
CreatePacket
(
const
pcap_pkthdr
&
packetHeader
,
const
unsigned
char
*
packetData
,
Packets
::
IDataLink
^
dataLink
);
static
Packets
::
Packet
^
CreatePacket
(
const
pcap_pkthdr
&
packetHeader
,
const
unsigned
char
*
packetData
,
Packets
::
IDataLink
^
dataLink
);
static
PacketSampleStatistics
^
PacketCommunicator
::
CreateStatistics
(
const
pcap_pkthdr
&
packetHeader
,
const
unsigned
char
*
packetData
);
static
PacketSampleStatistics
^
PacketCommunicator
::
CreateStatistics
(
const
pcap_pkthdr
&
packetHeader
,
const
unsigned
char
*
packetData
);
DeviceHandler
Result
RunPcapNextEx
(
pcap_pkthdr
**
packetHeader
,
const
unsigned
char
**
packetData
);
PacketCommunicatorReceive
Result
RunPcapNextEx
(
pcap_pkthdr
**
packetHeader
,
const
unsigned
char
**
packetData
);
[
System
::
Runtime
::
InteropServices
::
UnmanagedFunctionPointer
(
System
::
Runtime
::
InteropServices
::
CallingConvention
::
Cdecl
)]
[
System
::
Runtime
::
InteropServices
::
UnmanagedFunctionPointer
(
System
::
Runtime
::
InteropServices
::
CallingConvention
::
Cdecl
)]
delegate
void
HandlerDelegate
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
);
delegate
void
HandlerDelegate
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
);
void
AssertMode
(
DeviceHandle
rMode
mode
);
void
AssertMode
(
PacketCommunicato
rMode
mode
);
property
System
::
String
^
ErrorMessage
property
System
::
String
^
ErrorMessage
{
{
...
@@ -149,6 +150,6 @@ namespace PcapDotNet { namespace Core
...
@@ -149,6 +150,6 @@ namespace PcapDotNet { namespace Core
private
:
private
:
pcap_t
*
_pcapDescriptor
;
pcap_t
*
_pcapDescriptor
;
IpV4SocketAddress
^
_ipV4Netmask
;
IpV4SocketAddress
^
_ipV4Netmask
;
DeviceHandle
rMode
_mode
;
PacketCommunicato
rMode
_mode
;
};
};
}}
}}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Core/PacketTotalStatistics.cpp
View file @
6a6df7e5
#include "PacketTotalStatistics.h"
#include "PacketTotalStatistics.h"
using
namespace
System
;
using
namespace
System
::
Text
;
using
namespace
PcapDotNet
::
Core
;
using
namespace
PcapDotNet
::
Core
;
PacketTotalStatistics
::
PacketTotalStatistics
(
unsigned
int
packetsReceived
,
unsigned
int
packetsDroppedByDriver
,
unsigned
int
packetsDroppedByInterface
,
unsigned
int
packetsCaptured
)
PacketTotalStatistics
::
PacketTotalStatistics
(
unsigned
int
packetsReceived
,
unsigned
int
packetsDroppedByDriver
,
unsigned
int
packetsDroppedByInterface
,
unsigned
int
packetsCaptured
)
...
@@ -45,3 +47,17 @@ bool PacketTotalStatistics::Equals(Object^ other)
...
@@ -45,3 +47,17 @@ bool PacketTotalStatistics::Equals(Object^ other)
{
{
return
Equals
(
dynamic_cast
<
PacketTotalStatistics
^>
(
other
));
return
Equals
(
dynamic_cast
<
PacketTotalStatistics
^>
(
other
));
}
}
String
^
PacketTotalStatistics
::
ToString
()
{
StringBuilder
^
stringBuilder
=
gcnew
StringBuilder
();
stringBuilder
->
Append
(
"Packets Received: "
);
stringBuilder
->
Append
(
PacketsReceived
);
stringBuilder
->
Append
(
"Packets Dropped By Driver: "
);
stringBuilder
->
Append
(
PacketsDroppedByDriver
);
stringBuilder
->
Append
(
"Packets Dropped By Interface: "
);
stringBuilder
->
Append
(
PacketsDroppedByInterface
);
stringBuilder
->
Append
(
"Packets Captured: "
);
stringBuilder
->
Append
(
PacketsCaptured
);
return
stringBuilder
->
ToString
();
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Core/PacketTotalStatistics.h
View file @
6a6df7e5
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
namespace
PcapDotNet
{
namespace
Core
namespace
PcapDotNet
{
namespace
Core
{
{
public
ref
class
PacketTotalStatistics
public
ref
class
PacketTotalStatistics
:
System
::
IEquatable
<
PacketTotalStatistics
^>
{
{
public
:
public
:
PacketTotalStatistics
(
unsigned
int
packetsReceived
,
unsigned
int
packetsDroppedByDriver
,
unsigned
int
packetsDroppedByInterface
,
unsigned
int
packetsCaptured
);
PacketTotalStatistics
(
unsigned
int
packetsReceived
,
unsigned
int
packetsDroppedByDriver
,
unsigned
int
packetsDroppedByInterface
,
unsigned
int
packetsCaptured
);
...
@@ -27,9 +27,11 @@ namespace PcapDotNet { namespace Core
...
@@ -27,9 +27,11 @@ namespace PcapDotNet { namespace Core
unsigned
int
get
();
unsigned
int
get
();
}
}
bool
Equals
(
PacketTotalStatistics
^
other
);
virtual
bool
Equals
(
PacketTotalStatistics
^
other
);
virtual
bool
Equals
(
System
::
Object
^
other
)
override
;
virtual
bool
Equals
(
System
::
Object
^
other
)
override
;
virtual
System
::
String
^
ToString
()
override
;
private
:
private
:
unsigned
int
_packetsReceived
;
unsigned
int
_packetsReceived
;
unsigned
int
_packetsDroppedByDriver
;
unsigned
int
_packetsDroppedByDriver
;
...
...
PcapDotNet/src/PcapDotNet.Core/Timestamp.cpp
View file @
6a6df7e5
...
@@ -15,7 +15,8 @@ void Timestamp::PcapTimestampToDateTime(const timeval& pcapTimestamp, [System::R
...
@@ -15,7 +15,8 @@ void Timestamp::PcapTimestampToDateTime(const timeval& pcapTimestamp, [System::R
// static
// static
void
Timestamp
::
DateTimeToPcapTimestamp
(
System
::
DateTime
dateTime
,
timeval
&
pcapTimestamp
)
void
Timestamp
::
DateTimeToPcapTimestamp
(
System
::
DateTime
dateTime
,
timeval
&
pcapTimestamp
)
{
{
TimeSpan
timespan
=
dateTime
-
DateTime
(
1970
,
1
,
1
,
0
,
0
,
0
,
DateTimeKind
::
Utc
);
dateTime
=
dateTime
.
ToUniversalTime
();
TimeSpan
timespan
=
dateTime
-
DateTime
(
1970
,
1
,
1
,
0
,
0
,
0
,
DateTimeKind
::
Utc
);
pcapTimestamp
.
tv_sec
=
(
long
)
timespan
.
TotalSeconds
;
pcapTimestamp
.
tv_sec
=
(
long
)
timespan
.
TotalSeconds
;
pcapTimestamp
.
tv_usec
=
(
long
)(
timespan
.
Milliseconds
*
1000
);
pcapTimestamp
.
tv_usec
=
(
long
)(
timespan
.
Milliseconds
*
1000
);
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment