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
f66abd8c
Commit
f66abd8c
authored
Jul 04, 2009
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
--no commit message
--no commit message
parent
9443a5b3
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
278 additions
and
62 deletions
+278
-62
LivePacketDeviceTests.cs
PcapDotNet/src/PcapDotNet.Core.Test/LivePacketDeviceTests.cs
+40
-34
OfflinePacketDeviceTests.cs
...tNet/src/PcapDotNet.Core.Test/OfflinePacketDeviceTests.cs
+124
-13
PacketHandler.cs
PcapDotNet/src/PcapDotNet.Core.Test/PacketHandler.cs
+45
-0
PcapDotNet.Core.Test.csproj
...tNet/src/PcapDotNet.Core.Test/PcapDotNet.Core.Test.csproj
+1
-0
LivePacketCommunicator.cpp
PcapDotNet/src/PcapDotNet.Core/LivePacketCommunicator.cpp
+3
-3
LivePacketCommunicator.h
PcapDotNet/src/PcapDotNet.Core/LivePacketCommunicator.h
+20
-0
LivePacketDevice.cpp
PcapDotNet/src/PcapDotNet.Core/LivePacketDevice.cpp
+2
-2
PacketCommunicator.cpp
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.cpp
+27
-6
PacketCommunicator.h
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.h
+8
-0
PacketTotalStatistics.cpp
PcapDotNet/src/PcapDotNet.Core/PacketTotalStatistics.cpp
+4
-0
WinPCapDotNet.Core.vcproj
PcapDotNet/src/PcapDotNet.Core/WinPCapDotNet.Core.vcproj
+4
-4
No files found.
PcapDotNet/src/PcapDotNet.Core.Test/LivePacketDeviceTests.cs
View file @
f66abd8c
...
@@ -101,50 +101,46 @@ namespace PcapDotNet.Core.Test
...
@@ -101,50 +101,46 @@ namespace PcapDotNet.Core.Test
[
TestMethod
]
[
TestMethod
]
public
void
GetSomePacketsTest
()
public
void
GetSomePacketsTest
()
{
{
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
int
NumPacketsToSend
=
100
;
const
int
NumPacketsToSend
=
100
;
const
int
PacketSize
=
100
;
const
int
PacketSize
=
100
;
// Test normal mode
// Test normal mode
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
0
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
0
,
1
,
1.02
);
TestGetSomePackets
(
0
,
0
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
0
,
1
,
1.02
);
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
0
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
-
1
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
+
1
,
int
.
MaxValue
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
// Test non blocking
// Test non blocking
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
0
,
int
.
MaxValue
,
PacketSize
,
true
,
PacketCommunicatorReceiveResult
.
Ok
,
0
,
0
,
0.02
);
TestGetSomePackets
(
0
,
0
,
int
.
MaxValue
,
PacketSize
,
true
,
PacketCommunicatorReceiveResult
.
Ok
,
0
,
0
,
0.02
);
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
int
.
MaxValue
,
PacketSize
,
true
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
int
.
MaxValue
,
PacketSize
,
true
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
// Test break loop
// Test break loop
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0
,
0.02
);
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
PacketSize
,
true
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
PacketSize
,
true
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0
,
0.02
);
TestGetSomePackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
0
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
0
,
0
,
0.02
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
0
,
PacketSize
,
false
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
0
,
0
,
0.02
);
}
}
[
TestMethod
]
[
TestMethod
]
public
void
GetPacketsTest
()
public
void
GetPacketsTest
()
{
{
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
int
NumPacketsToSend
=
100
;
const
int
NumPacketsToSend
=
100
;
const
int
PacketSize
=
100
;
const
int
PacketSize
=
100
;
// Normal
// Normal
TestGetPackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
NumPacketsToSend
,
int
.
MaxValue
,
2
,
PacketSize
,
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
,
int
.
MaxValue
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0
,
0.02
);
// Wait for less packets
// Wait for less packets
TestGetPackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
int
.
MaxValue
,
2
,
PacketSize
,
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
/
2
,
int
.
MaxValue
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0
,
0.02
);
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0
,
0.02
);
// Wait for more packets
// Wait for more packets
TestGetPackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
0
,
int
.
MaxValue
,
2
,
PacketSize
,
TestGetPackets
(
NumPacketsToSend
,
0
,
int
.
MaxValue
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
None
,
NumPacketsToSend
,
2
,
2.02
);
PacketCommunicatorReceiveResult
.
None
,
NumPacketsToSend
,
2
,
2.02
);
TestGetPackets
(
NumPacketsToSend
,
-
1
,
int
.
MaxValue
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
None
,
NumPacketsToSend
,
2
,
2.02
);
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
+
1
,
int
.
MaxValue
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
None
,
NumPacketsToSend
,
2
,
2.02
);
// Break loop
// Break loop
TestGetPackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
NumPacketsToSend
,
0
,
2
,
PacketSize
,
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
,
0
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
0
,
0
,
0.02
);
PacketCommunicatorReceiveResult
.
BreakLoop
,
0
,
0
,
0.02
);
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
NumPacketsToSend
/
2
,
0
,
0.02
);
TestGetPackets
(
SourceMac
,
DestinationMac
,
NumPacketsToSend
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
2
,
PacketSize
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
NumPacketsToSend
/
2
,
0
,
0.02
);
}
}
[
TestMethod
]
[
TestMethod
]
...
@@ -294,16 +290,19 @@ namespace PcapDotNet.Core.Test
...
@@ -294,16 +290,19 @@ namespace PcapDotNet.Core.Test
}
}
}
}
private
static
void
TestGetSomePackets
(
string
sourceMac
,
string
destinationMac
,
int
numPacketsToSend
,
int
numPacketsToBreakLoop
,
int
packetSize
,
bool
nonBlocking
,
private
static
void
TestGetSomePackets
(
int
numPacketsToSend
,
int
numPacketsToGet
,
int
numPacketsToBreakLoop
,
int
packetSize
,
bool
nonBlocking
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
double
expectedMinSeconds
,
double
expectedMaxSeconds
)
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
double
expectedMinSeconds
,
double
expectedMaxSeconds
)
{
{
Packet
packetToSend
=
MoreRandom
.
BuildRandomPacket
(
sourceMac
,
destinationMac
,
packetSize
);
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
Packet
packetToSend
=
MoreRandom
.
BuildRandomPacket
(
SourceMac
,
DestinationMac
,
packetSize
);
using
(
PacketCommunicator
communicator
=
OpenLiveDevice
())
using
(
PacketCommunicator
communicator
=
OpenLiveDevice
())
{
{
communicator
.
NonBlocking
=
nonBlocking
;
communicator
.
NonBlocking
=
nonBlocking
;
Assert
.
AreEqual
(
nonBlocking
,
communicator
.
NonBlocking
);
Assert
.
AreEqual
(
nonBlocking
,
communicator
.
NonBlocking
);
communicator
.
SetFilter
(
"ether src "
+
sourceMac
+
" and ether dst "
+
d
estinationMac
);
communicator
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
D
estinationMac
);
int
numPacketsGot
;
int
numPacketsGot
;
for
(
int
i
=
0
;
i
!=
numPacketsToSend
;
++
i
)
for
(
int
i
=
0
;
i
!=
numPacketsToSend
;
++
i
)
...
@@ -313,7 +312,7 @@ namespace PcapDotNet.Core.Test
...
@@ -313,7 +312,7 @@ namespace PcapDotNet.Core.Test
if
(
numPacketsToBreakLoop
==
0
)
if
(
numPacketsToBreakLoop
==
0
)
communicator
.
Break
();
communicator
.
Break
();
DateTime
startWaiting
=
DateTime
.
Now
;
DateTime
startWaiting
=
DateTime
.
Now
;
PacketCommunicatorReceiveResult
result
=
communicator
.
GetSomePackets
(
out
numPacketsGot
,
numPacketsTo
Send
,
PacketCommunicatorReceiveResult
result
=
communicator
.
GetSomePackets
(
out
numPacketsGot
,
numPacketsTo
Get
,
delegate
(
Packet
packet
)
delegate
(
Packet
packet
)
{
{
Assert
.
AreEqual
(
packetToSend
,
packet
);
Assert
.
AreEqual
(
packetToSend
,
packet
);
...
@@ -330,16 +329,23 @@ namespace PcapDotNet.Core.Test
...
@@ -330,16 +329,23 @@ namespace PcapDotNet.Core.Test
}
}
}
}
private
void
TestGetPackets
(
string
sourceMac
,
string
destinationMac
,
int
numPacketsToSend
,
private
void
TestGetPackets
(
int
numPacketsToSend
,
int
numPacketsToWait
,
int
numPacketsToBreakLoop
,
double
secondsToWait
,
int
packetSize
,
int
numPacketsToWait
,
int
numPacketsToBreakLoop
,
double
secondsToWait
,
int
packetSize
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
double
expectedMinSeconds
,
double
expectedMaxSeconds
)
double
expectedMinSeconds
,
double
expectedMaxSeconds
)
{
{
string
TestDescription
=
"NumPacketsToSend="
+
numPacketsToSend
+
". NumPacketsToWait="
+
numPacketsToWait
+
". NumPacketsToBreakLoop="
+
numPacketsToBreakLoop
+
". SecondsToWait="
+
secondsToWait
+
". PacketSize="
+
packetSize
;
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
using
(
PacketCommunicator
communicator
=
OpenLiveDevice
())
using
(
PacketCommunicator
communicator
=
OpenLiveDevice
())
{
{
communicator
.
SetFilter
(
"ether src "
+
sourceMac
+
" and ether dst "
+
d
estinationMac
);
communicator
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
D
estinationMac
);
Packet
sentPacket
=
MoreRandom
.
BuildRandomPacket
(
sourceMac
,
d
estinationMac
,
packetSize
);
Packet
sentPacket
=
MoreRandom
.
BuildRandomPacket
(
SourceMac
,
D
estinationMac
,
packetSize
);
PacketCommunicatorReceiveResult
result
=
PacketCommunicatorReceiveResult
.
None
;
PacketCommunicatorReceiveResult
result
=
PacketCommunicatorReceiveResult
.
None
;
int
numPacketsHandled
=
0
;
int
numPacketsHandled
=
0
;
...
@@ -368,7 +374,7 @@ namespace PcapDotNet.Core.Test
...
@@ -368,7 +374,7 @@ namespace PcapDotNet.Core.Test
thread
.
Abort
();
thread
.
Abort
();
DateTime
finishedWaiting
=
DateTime
.
Now
;
DateTime
finishedWaiting
=
DateTime
.
Now
;
Assert
.
AreEqual
(
expectedResult
,
result
);
Assert
.
AreEqual
(
expectedResult
,
result
,
TestDescription
);
Assert
.
AreEqual
(
expectedNumPackets
,
numPacketsHandled
);
Assert
.
AreEqual
(
expectedNumPackets
,
numPacketsHandled
);
MoreAssert
.
IsInRange
(
expectedMinSeconds
,
expectedMaxSeconds
,
(
finishedWaiting
-
startWaiting
).
TotalSeconds
);
MoreAssert
.
IsInRange
(
expectedMinSeconds
,
expectedMaxSeconds
,
(
finishedWaiting
-
startWaiting
).
TotalSeconds
);
}
}
...
...
PcapDotNet/src/PcapDotNet.Core.Test/OfflinePacketDeviceTests.cs
View file @
f66abd8c
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.IO
;
using
System.Threading
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Packets
;
using
Packets
;
...
@@ -60,13 +61,13 @@ namespace PcapDotNet.Core.Test
...
@@ -60,13 +61,13 @@ namespace PcapDotNet.Core.Test
#
endregion
#
endregion
[
TestMethod
]
[
TestMethod
]
public
void
DumpPackets
Test
()
public
void
GetPacket
Test
()
{
{
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
const
int
NumPackets
=
10
;
const
int
NumPackets
=
10
;
Packet
expectedPacket
=
MoreRandom
.
BuildRandomPacket
(
SourceMac
,
DestinationMac
,
24
);
Packet
expectedPacket
=
MoreRandom
.
BuildRandomPacket
(
SourceMac
,
DestinationMac
,
100
);
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
(
NumPackets
,
expectedPacket
))
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
(
NumPackets
,
expectedPacket
))
{
{
...
@@ -90,13 +91,47 @@ namespace PcapDotNet.Core.Test
...
@@ -90,13 +91,47 @@ namespace PcapDotNet.Core.Test
}
}
[
TestMethod
]
[
TestMethod
]
public
void
SetNonBlock
Test
()
public
void
GetSomePackets
Test
()
{
{
const
int
NumPackets
=
10
;
const
int
NumPacketsToSend
=
100
;
// Normal
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0.05
,
0.05
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
/
2
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0.05
,
0.05
);
// Eof
TestGetSomePackets
(
NumPacketsToSend
,
0
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Eof
,
NumPacketsToSend
,
0.05
,
0.05
);
TestGetSomePackets
(
NumPacketsToSend
,
-
1
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Eof
,
NumPacketsToSend
,
0.05
,
0.05
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
+
1
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Eof
,
NumPacketsToSend
,
0.05
,
0.05
);
Packet
packet
=
MoreRandom
.
BuildRandomPacket
(
24
);
// Break loop
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0.05
,
0.05
);
TestGetSomePackets
(
NumPacketsToSend
,
NumPacketsToSend
,
0
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
0
,
0.05
,
0.05
);
}
[
TestMethod
]
public
void
GetPacketsTest
()
{
const
int
NumPacketsToSend
=
100
;
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
(
NumPackets
,
packet
))
// Normal
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
,
0.05
,
0.05
);
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
/
2
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Ok
,
NumPacketsToSend
/
2
,
0.05
,
0.05
);
// Eof
TestGetPackets
(
NumPacketsToSend
,
0
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Eof
,
NumPacketsToSend
,
0.05
,
0.05
);
TestGetPackets
(
NumPacketsToSend
,
-
1
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Eof
,
NumPacketsToSend
,
0.05
,
0.05
);
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
+
1
,
int
.
MaxValue
,
PacketCommunicatorReceiveResult
.
Eof
,
NumPacketsToSend
,
0.05
,
0.05
);
// Break loop
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
,
NumPacketsToSend
/
2
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
NumPacketsToSend
/
2
,
0.05
,
0.05
);
TestGetPackets
(
NumPacketsToSend
,
NumPacketsToSend
,
0
,
PacketCommunicatorReceiveResult
.
BreakLoop
,
0
,
0.05
,
0.05
);
}
[
TestMethod
]
public
void
SetNonBlockTest
()
{
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
())
{
{
Assert
.
AreEqual
(
false
,
communicator
.
NonBlocking
);
Assert
.
AreEqual
(
false
,
communicator
.
NonBlocking
);
communicator
.
NonBlocking
=
false
;
communicator
.
NonBlocking
=
false
;
...
@@ -108,13 +143,9 @@ namespace PcapDotNet.Core.Test
...
@@ -108,13 +143,9 @@ namespace PcapDotNet.Core.Test
[
TestMethod
]
[
TestMethod
]
[
ExpectedException
(
typeof
(
InvalidOperationException
))]
[
ExpectedException
(
typeof
(
InvalidOperationException
))]
public
void
GetTotalStatisticsTest
()
public
void
GetTotalStatistics
Error
Test
()
{
{
const
int
NumPackets
=
10
;
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
())
Packet
packet
=
MoreRandom
.
BuildRandomPacket
(
24
);
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
(
NumPackets
,
packet
))
{
{
Assert
.
IsNotNull
(
communicator
.
TotalStatistics
);
Assert
.
IsNotNull
(
communicator
.
TotalStatistics
);
}
}
...
@@ -129,7 +160,87 @@ namespace PcapDotNet.Core.Test
...
@@ -129,7 +160,87 @@ namespace PcapDotNet.Core.Test
}
}
}
}
public
static
PacketCommunicator
OpenOfflineDevice
(
int
numPackets
,
Packet
packet
)
[
TestMethod
]
[
ExpectedException
(
typeof
(
InvalidOperationException
))]
public
void
SendPacketTest
()
{
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
())
{
communicator
.
SendPacket
(
MoreRandom
.
BuildRandomPacket
(
100
));
}
}
private
static
void
TestGetSomePackets
(
int
numPacketsToSend
,
int
numPacketsToGet
,
int
numPacketsToBreakLoop
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
double
expectedMinSeconds
,
double
expectedMaxSeconds
)
{
string
TestDescription
=
"NumPacketsToSend="
+
numPacketsToSend
+
". NumPacketsToGet="
+
numPacketsToGet
+
". NumPacketsToBreakLoop="
+
numPacketsToBreakLoop
;
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
Packet
expectedPacket
=
MoreRandom
.
BuildRandomPacket
(
SourceMac
,
DestinationMac
,
100
);
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
(
numPacketsToSend
,
expectedPacket
))
{
communicator
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
DestinationMac
);
if
(
numPacketsToBreakLoop
==
0
)
communicator
.
Break
();
PacketHandler
handler
=
new
PacketHandler
(
expectedPacket
,
expectedMinSeconds
,
expectedMaxSeconds
,
communicator
,
numPacketsToBreakLoop
);
int
numPacketsGot
;
PacketCommunicatorReceiveResult
result
=
communicator
.
GetSomePackets
(
out
numPacketsGot
,
numPacketsToGet
,
handler
.
Handle
);
Assert
.
AreEqual
(
expectedResult
,
result
);
Assert
.
AreEqual
(
expectedNumPackets
,
numPacketsGot
,
"NumPacketsGot. Test: "
+
TestDescription
);
Assert
.
AreEqual
(
expectedNumPackets
,
handler
.
NumPacketsHandled
,
"NumPacketsHandled. Test: "
+
TestDescription
);
}
}
private
static
void
TestGetPackets
(
int
numPacketsToSend
,
int
numPacketsToGet
,
int
numPacketsToBreakLoop
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
double
expectedMinSeconds
,
double
expectedMaxSeconds
)
{
string
TestDescription
=
"NumPacketsToSend="
+
numPacketsToSend
+
". NumPacketsToGet="
+
numPacketsToGet
+
". NumPacketsToBreakLoop="
+
numPacketsToBreakLoop
;
const
string
SourceMac
=
"11:22:33:44:55:66"
;
const
string
DestinationMac
=
"77:88:99:AA:BB:CC"
;
Packet
expectedPacket
=
MoreRandom
.
BuildRandomPacket
(
SourceMac
,
DestinationMac
,
24
);
using
(
PacketCommunicator
communicator
=
OpenOfflineDevice
(
numPacketsToSend
,
expectedPacket
))
{
communicator
.
SetFilter
(
"ether src "
+
SourceMac
+
" and ether dst "
+
DestinationMac
);
if
(
numPacketsToBreakLoop
==
0
)
communicator
.
Break
();
PacketHandler
handler
=
new
PacketHandler
(
expectedPacket
,
expectedMinSeconds
,
expectedMaxSeconds
,
communicator
,
numPacketsToBreakLoop
);
PacketCommunicatorReceiveResult
result
=
PacketCommunicatorReceiveResult
.
None
;
Thread
thread
=
new
Thread
(
delegate
()
{
result
=
communicator
.
GetPackets
(
numPacketsToGet
,
handler
.
Handle
);
});
thread
.
Start
();
if
(!
thread
.
Join
(
TimeSpan
.
FromSeconds
(
5
)))
{
thread
.
Abort
();
}
Assert
.
AreEqual
(
expectedResult
,
result
,
TestDescription
);
Assert
.
AreEqual
(
expectedNumPackets
,
handler
.
NumPacketsHandled
);
}
}
private
static
PacketCommunicator
OpenOfflineDevice
()
{
return
OpenOfflineDevice
(
10
,
MoreRandom
.
BuildRandomPacket
(
100
));
}
private
static
PacketCommunicator
OpenOfflineDevice
(
int
numPackets
,
Packet
packet
)
{
{
string
dumpFilename
=
Path
.
GetTempPath
()
+
@"dump.pcap"
;
string
dumpFilename
=
Path
.
GetTempPath
()
+
@"dump.pcap"
;
...
...
PcapDotNet/src/PcapDotNet.Core.Test/PacketHandler.cs
0 → 100644
View file @
f66abd8c
using
System
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Packets
;
namespace
PcapDotNet.Core.Test
{
internal
class
PacketHandler
{
public
PacketHandler
(
Packet
expectedPacket
,
DateTime
expectedMinTimestamp
,
DateTime
expectedMaxTimestamp
,
PacketCommunicator
communicator
,
int
numPacketsToBreakLoop
)
{
_expectedPacket
=
expectedPacket
;
_expectedMinTimestamp
=
expectedMinTimestamp
;
_expectedMaxTimestamp
=
expectedMaxTimestamp
;
_communicator
=
communicator
;
_numPacketsToBreakLoop
=
numPacketsToBreakLoop
;
}
public
PacketHandler
(
Packet
expectedPacket
,
double
expectedSecondsBefore
,
double
expectedSecondsAfter
,
PacketCommunicator
communicator
,
int
numPacketsToBreakLoop
)
:
this
(
expectedPacket
,
expectedPacket
.
Timestamp
.
AddSeconds
(-
expectedSecondsBefore
),
expectedPacket
.
Timestamp
.
AddSeconds
(
expectedSecondsAfter
),
communicator
,
numPacketsToBreakLoop
)
{
}
public
void
Handle
(
Packet
packet
)
{
Assert
.
AreEqual
(
_expectedPacket
,
packet
);
MoreAssert
.
IsInRange
(
_expectedMinTimestamp
,
_expectedMaxTimestamp
,
packet
.
Timestamp
);
++
_numPacketsHandled
;
if
(
NumPacketsHandled
>=
_numPacketsToBreakLoop
)
_communicator
.
Break
();
}
public
int
NumPacketsHandled
{
get
{
return
_numPacketsHandled
;
}
}
private
readonly
Packet
_expectedPacket
;
private
readonly
DateTime
_expectedMinTimestamp
;
private
readonly
DateTime
_expectedMaxTimestamp
;
private
readonly
PacketCommunicator
_communicator
;
private
readonly
int
_numPacketsToBreakLoop
=
int
.
MaxValue
;
private
int
_numPacketsHandled
;
// = 0;
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Core.Test/PcapDotNet.Core.Test.csproj
View file @
f66abd8c
...
@@ -46,6 +46,7 @@
...
@@ -46,6 +46,7 @@
<Compile Include="MoreAssert.cs" />
<Compile Include="MoreAssert.cs" />
<Compile Include="LivePacketDeviceTests.cs" />
<Compile Include="LivePacketDeviceTests.cs" />
<Compile Include="MoreRandom.cs" />
<Compile Include="MoreRandom.cs" />
<Compile Include="PacketHandler.cs" />
<Compile Include="PacketSendQueueTests.cs" />
<Compile Include="PacketSendQueueTests.cs" />
<Compile Include="OfflinePacketDeviceTests.cs" />
<Compile Include="OfflinePacketDeviceTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
...
...
PcapDotNet/src/PcapDotNet.Core/
Onlin
ePacketCommunicator.cpp
→
PcapDotNet/src/PcapDotNet.Core/
Liv
ePacketCommunicator.cpp
View file @
f66abd8c
#include "
Onlin
ePacketCommunicator.h"
#include "
Liv
ePacketCommunicator.h"
#include "Pcap.h"
#include "Pcap.h"
using
namespace
PcapDotNet
::
Core
;
using
namespace
PcapDotNet
::
Core
;
OnlinePacketCommunicator
::
Onlin
ePacketCommunicator
(
const
char
*
source
,
int
snapshotLength
,
PacketDeviceOpenFlags
flags
,
int
readTimeout
,
pcap_rmtauth
*
auth
,
SocketAddress
^
netmask
)
LivePacketCommunicator
::
Liv
ePacketCommunicator
(
const
char
*
source
,
int
snapshotLength
,
PacketDeviceOpenFlags
flags
,
int
readTimeout
,
pcap_rmtauth
*
auth
,
SocketAddress
^
netmask
)
:
PacketCommunicator
(
source
,
snapshotLength
,
flags
,
readTimeout
,
auth
,
netmask
)
:
PacketCommunicator
(
source
,
snapshotLength
,
flags
,
readTimeout
,
auth
,
netmask
)
{
{
}
}
PacketTotalStatistics
^
Onlin
ePacketCommunicator
::
TotalStatistics
::
get
()
PacketTotalStatistics
^
Liv
ePacketCommunicator
::
TotalStatistics
::
get
()
{
{
int
statisticsSize
;
int
statisticsSize
;
pcap_stat
*
statistics
=
pcap_stats_ex
(
_pcapDescriptor
,
&
statisticsSize
);
pcap_stat
*
statistics
=
pcap_stats_ex
(
_pcapDescriptor
,
&
statisticsSize
);
...
...
PcapDotNet/src/PcapDotNet.Core/
Onlin
ePacketCommunicator.h
→
PcapDotNet/src/PcapDotNet.Core/
Liv
ePacketCommunicator.h
View file @
f66abd8c
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
namespace
PcapDotNet
{
namespace
Core
namespace
PcapDotNet
{
namespace
Core
{
{
public
ref
class
Onlin
ePacketCommunicator
:
PacketCommunicator
public
ref
class
Liv
ePacketCommunicator
:
PacketCommunicator
{
{
public
:
public
:
virtual
property
PacketTotalStatistics
^
TotalStatistics
virtual
property
PacketTotalStatistics
^
TotalStatistics
...
@@ -13,8 +13,8 @@ namespace PcapDotNet { namespace Core
...
@@ -13,8 +13,8 @@ namespace PcapDotNet { namespace Core
}
}
internal
:
internal
:
Onlin
ePacketCommunicator
(
const
char
*
source
,
int
snapshotLength
,
PacketDeviceOpenFlags
flags
,
int
readTimeout
,
pcap_rmtauth
*
auth
,
Liv
ePacketCommunicator
(
const
char
*
source
,
int
snapshotLength
,
PacketDeviceOpenFlags
flags
,
int
readTimeout
,
pcap_rmtauth
*
auth
,
SocketAddress
^
netmask
);
SocketAddress
^
netmask
);
};
};
}}
}}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Core/LivePacketDevice.cpp
View file @
f66abd8c
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
#include "MarshalingServices.h"
#include "MarshalingServices.h"
#include "Pcap.h"
#include "Pcap.h"
#include "
Onlin
ePacketCommunicator.h"
#include "
Liv
ePacketCommunicator.h"
using
namespace
System
;
using
namespace
System
;
using
namespace
System
::
Collections
::
Generic
;
using
namespace
System
::
Collections
::
Generic
;
...
@@ -82,7 +82,7 @@ PacketCommunicator^ LivePacketDevice::Open(int snapshotLength, PacketDeviceOpenF
...
@@ -82,7 +82,7 @@ PacketCommunicator^ LivePacketDevice::Open(int snapshotLength, PacketDeviceOpenF
netmask
=
Addresses
[
0
]
->
Netmask
;
netmask
=
Addresses
[
0
]
->
Netmask
;
// Open the device
// Open the device
return
gcnew
Onlin
ePacketCommunicator
(
deviceName
.
c_str
(),
snapshotLength
,
flags
,
readTimeout
,
NULL
,
netmask
);
return
gcnew
Liv
ePacketCommunicator
(
deviceName
.
c_str
(),
snapshotLength
,
flags
,
readTimeout
,
NULL
,
netmask
);
}
}
// Private Methods
// Private Methods
...
...
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.cpp
View file @
f66abd8c
...
@@ -148,13 +148,21 @@ PacketCommunicatorReceiveResult PacketCommunicator::GetSomePackets([Out] int% nu
...
@@ -148,13 +148,21 @@ PacketCommunicatorReceiveResult PacketCommunicator::GetSomePackets([Out] int% nu
functionPointer
,
functionPointer
,
NULL
);
NULL
);
if
(
numPacketsGot
==
-
1
)
switch
(
numPacketsGot
)
throw
BuildInvalidOperation
(
"Failed reading from device"
);
if
(
numPacketsGot
==
-
2
)
{
{
case
-
2
:
numPacketsGot
=
0
;
numPacketsGot
=
0
;
return
PacketCommunicatorReceiveResult
::
BreakLoop
;
return
PacketCommunicatorReceiveResult
::
BreakLoop
;
case
-
1
:
throw
BuildInvalidOperation
(
"Failed reading from device"
);
case
0
:
if
(
packetHandler
->
PacketCounter
!=
0
)
{
numPacketsGot
=
packetHandler
->
PacketCounter
;
return
PacketCommunicatorReceiveResult
::
Eof
;
}
}
}
return
PacketCommunicatorReceiveResult
::
Ok
;
return
PacketCommunicatorReceiveResult
::
Ok
;
}
}
...
@@ -167,10 +175,17 @@ PacketCommunicatorReceiveResult PacketCommunicator::GetPackets(int numPackets, H
...
@@ -167,10 +175,17 @@ PacketCommunicatorReceiveResult PacketCommunicator::GetPackets(int numPackets, H
pcap_handler
functionPointer
=
(
pcap_handler
)
Marshal
::
GetFunctionPointerForDelegate
(
packetHandlerDelegate
).
ToPointer
();
pcap_handler
functionPointer
=
(
pcap_handler
)
Marshal
::
GetFunctionPointerForDelegate
(
packetHandlerDelegate
).
ToPointer
();
int
result
=
pcap_loop
(
_pcapDescriptor
,
numPackets
,
functionPointer
,
NULL
);
int
result
=
pcap_loop
(
_pcapDescriptor
,
numPackets
,
functionPointer
,
NULL
);
if
(
result
==
-
1
)
switch
(
result
)
throw
BuildInvalidOperation
(
"Failed reading from device"
);
{
if
(
result
==
-
2
)
case
-
2
:
return
PacketCommunicatorReceiveResult
::
BreakLoop
;
return
PacketCommunicatorReceiveResult
::
BreakLoop
;
case
-
1
:
throw
BuildInvalidOperation
(
"Failed reading from device"
);
case
0
:
if
(
packetHandler
->
PacketCounter
!=
numPackets
)
return
PacketCommunicatorReceiveResult
::
Eof
;
}
return
PacketCommunicatorReceiveResult
::
Ok
;
return
PacketCommunicatorReceiveResult
::
Ok
;
}
}
...
@@ -315,9 +330,15 @@ InvalidOperationException^ PacketCommunicator::BuildInvalidOperation(System::Str
...
@@ -315,9 +330,15 @@ InvalidOperationException^ PacketCommunicator::BuildInvalidOperation(System::Str
void
PacketCommunicator
::
PacketHandler
::
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
)
void
PacketCommunicator
::
PacketHandler
::
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
)
{
{
++
_packetCounter
;
_callBack
->
Invoke
(
CreatePacket
(
*
packetHeader
,
packetData
,
_dataLink
));
_callBack
->
Invoke
(
CreatePacket
(
*
packetHeader
,
packetData
,
_dataLink
));
}
}
int
PacketCommunicator
::
PacketHandler
::
PacketCounter
::
get
()
{
return
_packetCounter
;
}
void
PacketCommunicator
::
StatisticsHandler
::
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
)
void
PacketCommunicator
::
StatisticsHandler
::
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
)
{
{
_callBack
->
Invoke
(
CreateStatistics
(
*
packetHeader
,
packetData
));
_callBack
->
Invoke
(
CreateStatistics
(
*
packetHeader
,
packetData
));
...
...
PcapDotNet/src/PcapDotNet.Core/PacketCommunicator.h
View file @
f66abd8c
...
@@ -115,8 +115,15 @@ namespace PcapDotNet { namespace Core
...
@@ -115,8 +115,15 @@ namespace PcapDotNet { namespace Core
void
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
);
void
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
);
property
int
PacketCounter
{
int
get
();
}
private
:
HandlePacket
^
_callBack
;
HandlePacket
^
_callBack
;
PcapDataLink
_dataLink
;
PcapDataLink
_dataLink
;
int
_packetCounter
;
};
};
ref
class
StatisticsHandler
ref
class
StatisticsHandler
...
@@ -129,6 +136,7 @@ namespace PcapDotNet { namespace Core
...
@@ -129,6 +136,7 @@ namespace PcapDotNet { namespace Core
void
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
);
void
Handle
(
unsigned
char
*
user
,
const
struct
pcap_pkthdr
*
packetHeader
,
const
unsigned
char
*
packetData
);
private
:
HandleStatistics
^
_callBack
;
HandleStatistics
^
_callBack
;
};
};
...
...
PcapDotNet/src/PcapDotNet.Core/PacketTotalStatistics.cpp
View file @
f66abd8c
...
@@ -53,11 +53,15 @@ String^ PacketTotalStatistics::ToString()
...
@@ -53,11 +53,15 @@ String^ PacketTotalStatistics::ToString()
StringBuilder
^
stringBuilder
=
gcnew
StringBuilder
();
StringBuilder
^
stringBuilder
=
gcnew
StringBuilder
();
stringBuilder
->
Append
(
"Packets Received: "
);
stringBuilder
->
Append
(
"Packets Received: "
);
stringBuilder
->
Append
(
PacketsReceived
);
stringBuilder
->
Append
(
PacketsReceived
);
stringBuilder
->
Append
(
". "
);
stringBuilder
->
Append
(
"Packets Dropped By Driver: "
);
stringBuilder
->
Append
(
"Packets Dropped By Driver: "
);
stringBuilder
->
Append
(
PacketsDroppedByDriver
);
stringBuilder
->
Append
(
PacketsDroppedByDriver
);
stringBuilder
->
Append
(
". "
);
stringBuilder
->
Append
(
"Packets Dropped By Interface: "
);
stringBuilder
->
Append
(
"Packets Dropped By Interface: "
);
stringBuilder
->
Append
(
PacketsDroppedByInterface
);
stringBuilder
->
Append
(
PacketsDroppedByInterface
);
stringBuilder
->
Append
(
". "
);
stringBuilder
->
Append
(
"Packets Captured: "
);
stringBuilder
->
Append
(
"Packets Captured: "
);
stringBuilder
->
Append
(
PacketsCaptured
);
stringBuilder
->
Append
(
PacketsCaptured
);
stringBuilder
->
Append
(
"."
);
return
stringBuilder
->
ToString
();
return
stringBuilder
->
ToString
();
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Core/WinPCapDotNet.Core.vcproj
View file @
f66abd8c
...
@@ -267,19 +267,19 @@
...
@@ -267,19 +267,19 @@
Name=
"PacketCommunicator"
Name=
"PacketCommunicator"
>
>
<File
<File
RelativePath=
".\
Offlin
ePacketCommunicator.cpp"
RelativePath=
".\
Liv
ePacketCommunicator.cpp"
>
>
</File>
</File>
<File
<File
RelativePath=
".\
Offlin
ePacketCommunicator.h"
RelativePath=
".\
Liv
ePacketCommunicator.h"
>
>
</File>
</File>
<File
<File
RelativePath=
".\O
n
linePacketCommunicator.cpp"
RelativePath=
".\O
ff
linePacketCommunicator.cpp"
>
>
</File>
</File>
<File
<File
RelativePath=
".\O
n
linePacketCommunicator.h"
RelativePath=
".\O
ff
linePacketCommunicator.h"
>
>
</File>
</File>
<File
<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