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
cc7cd211
Commit
cc7cd211
authored
Mar 19, 2010
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GRE
parent
919c9236
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
183 additions
and
16 deletions
+183
-16
GreTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/GreTests.cs
+100
-0
PcapDotNet.Packets.Test.csproj
...rc/PcapDotNet.Packets.Test/PcapDotNet.Packets.Test.csproj
+1
-0
RandomPacketsExtensions.cs
...c/PcapDotNet.Packets.TestUtils/RandomPacketsExtensions.cs
+7
-0
GreDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreDatagram.cs
+41
-16
GreLayer.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreLayer.cs
+33
-0
PcapDotNet.Packets.csproj
PcapDotNet/src/PcapDotNet.Packets/PcapDotNet.Packets.csproj
+1
-0
No files found.
PcapDotNet/src/PcapDotNet.Packets.Test/GreTests.cs
0 → 100644
View file @
cc7cd211
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
PcapDotNet.Packets.Ethernet
;
using
PcapDotNet.Packets.Gre
;
using
PcapDotNet.Packets.Icmp
;
using
PcapDotNet.Packets.IpV4
;
using
PcapDotNet.Packets.TestUtils
;
using
PcapDotNet.TestUtils
;
namespace
PcapDotNet.Packets.Test
{
/// <summary>
/// Summary description for GreTests
/// </summary>
[
TestClass
]
public
class
GreTests
{
public
GreTests
()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// Gets or sets the test context which provides
/// information about and functionality for the current test run.
/// </summary>
public
TestContext
TestContext
{
get
;
set
;
}
#
region
Additional
test
attributes
//
// You can use the following additional attributes as you write your tests:
//
// Use ClassInitialize to run code before running the first test in the class
// [ClassInitialize()]
// public static void MyClassInitialize(TestContext testContext) { }
//
// Use ClassCleanup to run code after all tests in a class have run
// [ClassCleanup()]
// public static void MyClassCleanup() { }
//
// Use TestInitialize to run code before running each test
// [TestInitialize()]
// public void MyTestInitialize() { }
//
// Use TestCleanup to run code after each test has run
// [TestCleanup()]
// public void MyTestCleanup() { }
//
#
endregion
[
TestMethod
]
public
void
RandomGreTest
()
{
EthernetLayer
ethernetLayer
=
new
EthernetLayer
{
Source
=
new
MacAddress
(
"00:01:02:03:04:05"
),
Destination
=
new
MacAddress
(
"A0:A1:A2:A3:A4:A5"
)
};
Random
random
=
new
Random
();
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
ipV4Layer
.
HeaderChecksum
=
null
;
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
{
GreLayer
greLayer
=
random
.
NextGreLayer
();
PacketBuilder
packetBuilder
=
new
PacketBuilder
(
ethernetLayer
,
ipV4Layer
,
greLayer
);
Packet
packet
=
packetBuilder
.
Build
(
DateTime
.
Now
);
Assert
.
IsTrue
(
packet
.
IsValid
,
"IsValid"
);
// Ethernet
ethernetLayer
.
EtherType
=
EthernetType
.
IpV4
;
Assert
.
AreEqual
(
ethernetLayer
,
packet
.
Ethernet
.
ExtractLayer
(),
"Ethernet Layer"
);
// IPv4
ipV4Layer
.
Protocol
=
IpV4Protocol
.
InternetControlMessageProtocol
;
ipV4Layer
.
HeaderChecksum
=
((
IpV4Layer
)
packet
.
Ethernet
.
IpV4
.
ExtractLayer
()).
HeaderChecksum
;
Assert
.
AreEqual
(
ipV4Layer
,
packet
.
Ethernet
.
IpV4
.
ExtractLayer
());
ipV4Layer
.
HeaderChecksum
=
null
;
Assert
.
AreEqual
(
ipV4Layer
.
Length
,
packet
.
Ethernet
.
IpV4
.
HeaderLength
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
IsHeaderChecksumCorrect
);
Assert
.
AreEqual
(
ipV4Layer
.
Length
+
greLayer
.
Length
,
packet
.
Ethernet
.
IpV4
.
TotalLength
);
Assert
.
AreEqual
(
IpV4Datagram
.
DefaultVersion
,
packet
.
Ethernet
.
IpV4
.
Version
);
// GRE
GreDatagram
actualGre
=
packet
.
Ethernet
.
IpV4
.
Gre
;
GreLayer
actualGreLayer
=
(
GreLayer
)
actualGre
.
ExtractLayer
();
Assert
.
AreEqual
(
greLayer
,
actualGreLayer
,
"Layer"
);
}
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets.Test/PcapDotNet.Packets.Test.csproj
View file @
cc7cd211
...
@@ -49,6 +49,7 @@
...
@@ -49,6 +49,7 @@
<Compile Include="DataLinkTests.cs" />
<Compile Include="DataLinkTests.cs" />
<Compile Include="EndianitiyTests.cs" />
<Compile Include="EndianitiyTests.cs" />
<Compile Include="EthernetTests.cs" />
<Compile Include="EthernetTests.cs" />
<Compile Include="GreTests.cs" />
<Compile Include="IcmpTests.cs" />
<Compile Include="IcmpTests.cs" />
<Compile Include="IgmpTests.cs" />
<Compile Include="IgmpTests.cs" />
<Compile Include="IpV4Tests.cs" />
<Compile Include="IpV4Tests.cs" />
...
...
PcapDotNet/src/PcapDotNet.Packets.TestUtils/RandomPacketsExtensions.cs
View file @
cc7cd211
...
@@ -6,6 +6,7 @@ using PcapDotNet.Base;
...
@@ -6,6 +6,7 @@ using PcapDotNet.Base;
using
PcapDotNet.Packets
;
using
PcapDotNet.Packets
;
using
PcapDotNet.Packets.Arp
;
using
PcapDotNet.Packets.Arp
;
using
PcapDotNet.Packets.Ethernet
;
using
PcapDotNet.Packets.Ethernet
;
using
PcapDotNet.Packets.Gre
;
using
PcapDotNet.Packets.Icmp
;
using
PcapDotNet.Packets.Icmp
;
using
PcapDotNet.Packets.Igmp
;
using
PcapDotNet.Packets.Igmp
;
using
PcapDotNet.Packets.IpV4
;
using
PcapDotNet.Packets.IpV4
;
...
@@ -578,6 +579,12 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -578,6 +579,12 @@ namespace PcapDotNet.Packets.TestUtils
}
}
}
}
// GRE
public
static
GreLayer
NextGreLayer
(
this
Random
random
)
{
return
new
GreLayer
();
}
// ICMP
// ICMP
public
static
IcmpLayer
NextIcmpLayer
(
this
Random
random
)
public
static
IcmpLayer
NextIcmpLayer
(
this
Random
random
)
...
...
PcapDotNet/src/PcapDotNet.Packets/Gre/GreDatagram.cs
View file @
cc7cd211
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Collections.ObjectModel
;
using
System.Collections.ObjectModel
;
using
System.Linq
;
using
PcapDotNet.Packets.Ethernet
;
using
PcapDotNet.Packets.Ethernet
;
using
PcapDotNet.Packets.IpV4
;
using
PcapDotNet.Packets.IpV4
;
...
@@ -49,36 +50,33 @@ namespace PcapDotNet.Packets.Gre
...
@@ -49,36 +50,33 @@ namespace PcapDotNet.Packets.Gre
public
const
byte
StrictSourceRoute
=
0x08
;
public
const
byte
StrictSourceRoute
=
0x08
;
public
const
byte
RecursionControl
=
0x07
;
public
const
byte
RecursionControl
=
0x07
;
public
const
byte
Version
=
0x07
;
public
const
byte
Version
=
0x07
;
// private const ushort Reserved0 = 0x7FF8;
}
}
public
const
int
HeaderMinimumLength
=
4
;
public
const
int
HeaderMinimumLength
=
4
;
public
const
int
HeaderMaximumLength
=
8
;
public
int
HeaderLength
public
int
HeaderLength
{
{
get
get
{
{
if
(
ChecksumPresent
)
return
OffsetRouting
+
(
RoutingPresent
return
HeaderMaximumLength
;
?
Routing
.
Sum
(
entry
=>
entry
.
Length
)
+
GreSourceRouteEntry
.
HeaderLength
// Routing and Routing termination
return
HeaderMinimumLength
;
:
0
)
;
}
}
}
}
private
int
OffsetKey
private
int
OffsetKey
{
{
get
{
return
HeaderMinimumLength
+
((
ChecksumPresent
||
RoutingPresent
)
?
4
:
0
);}
get
{
return
HeaderMinimumLength
+
((
ChecksumPresent
||
RoutingPresent
)
?
sizeof
(
ushort
)
+
sizeof
(
ushort
)
:
0
);}
}
}
private
int
OffsetSequenceNumber
private
int
OffsetSequenceNumber
{
{
get
{
return
OffsetKey
+
(
KeyPresent
?
4
:
0
);
}
get
{
return
OffsetKey
+
(
KeyPresent
?
sizeof
(
uint
)
:
0
);
}
}
}
private
int
OffsetRouting
private
int
OffsetRouting
{
{
get
{
return
OffsetSequenceNumber
+
(
SequenceNumberPresent
?
4
:
0
);
}
get
{
return
OffsetSequenceNumber
+
(
SequenceNumberPresent
?
sizeof
(
uint
)
:
0
);
}
}
}
/// <summary>
/// <summary>
...
@@ -87,7 +85,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -87,7 +85,7 @@ namespace PcapDotNet.Packets.Gre
/// </summary>
/// </summary>
public
bool
ChecksumPresent
public
bool
ChecksumPresent
{
{
get
{
return
(
this
[
Offset
.
ChecksumPresent
]
&
Mask
.
ChecksumPresent
)
!=
0
;
}
get
{
return
(
this
[
Offset
.
ChecksumPresent
]
&
Mask
.
ChecksumPresent
)
==
Mask
.
ChecksumPresent
;
}
}
}
/// <summary>
/// <summary>
...
@@ -96,7 +94,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -96,7 +94,7 @@ namespace PcapDotNet.Packets.Gre
/// </summary>
/// </summary>
public
bool
RoutingPresent
public
bool
RoutingPresent
{
{
get
{
return
(
this
[
Offset
.
RoutingPresent
]
&
Mask
.
RoutingPresent
)
!=
0
;
}
get
{
return
(
this
[
Offset
.
RoutingPresent
]
&
Mask
.
RoutingPresent
)
==
Mask
.
RoutingPresent
;
}
}
}
/// <summary>
/// <summary>
...
@@ -105,7 +103,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -105,7 +103,7 @@ namespace PcapDotNet.Packets.Gre
/// </summary>
/// </summary>
public
bool
KeyPresent
public
bool
KeyPresent
{
{
get
{
return
(
this
[
Offset
.
KeyPresent
]
&
Mask
.
KeyPresent
)
!=
0
;
}
get
{
return
(
this
[
Offset
.
KeyPresent
]
&
Mask
.
KeyPresent
)
==
Mask
.
KeyPresent
;
}
}
}
/// <summary>
/// <summary>
...
@@ -114,7 +112,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -114,7 +112,7 @@ namespace PcapDotNet.Packets.Gre
/// </summary>
/// </summary>
public
bool
SequenceNumberPresent
public
bool
SequenceNumberPresent
{
{
get
{
return
(
this
[
Offset
.
SequenceNumberPresent
]
&
Mask
.
SequenceNumberPresent
)
!=
0
;
}
get
{
return
(
this
[
Offset
.
SequenceNumberPresent
]
&
Mask
.
SequenceNumberPresent
)
==
Mask
.
SequenceNumberPresent
;
}
}
}
/// <summary>
/// <summary>
...
@@ -123,7 +121,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -123,7 +121,7 @@ namespace PcapDotNet.Packets.Gre
/// </summary>
/// </summary>
public
bool
StrictSourceRoute
public
bool
StrictSourceRoute
{
{
get
{
return
(
this
[
Offset
.
StrictSourceRoute
]
&
Mask
.
StrictSourceRoute
)
!=
0
;
}
get
{
return
(
this
[
Offset
.
StrictSourceRoute
]
&
Mask
.
StrictSourceRoute
)
==
Mask
.
StrictSourceRoute
;
}
}
}
...
@@ -257,8 +255,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -257,8 +255,7 @@ namespace PcapDotNet.Packets.Gre
protected
override
bool
CalculateIsValid
()
protected
override
bool
CalculateIsValid
()
{
{
throw
new
NotImplementedException
();
throw
new
NotImplementedException
();
// return (Length >= HeaderMinimumLength && HeaderLength >= HeaderLength &&
return
(
Length
>=
HeaderMinimumLength
&&
Length
>=
HeaderLength
);
// Reserved0 == 0 && Reserved1 == 0);
}
}
internal
GreDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
internal
GreDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
...
@@ -266,6 +263,11 @@ namespace PcapDotNet.Packets.Gre
...
@@ -266,6 +263,11 @@ namespace PcapDotNet.Packets.Gre
{
{
}
}
internal
static
void
WriteHeader
(
byte
[]
buffer
,
int
offset
)
{
throw
new
NotImplementedException
();
}
private
IpV4Datagram
_ipV4
;
private
IpV4Datagram
_ipV4
;
private
ReadOnlyCollection
<
GreSourceRouteEntry
>
_routing
;
private
ReadOnlyCollection
<
GreSourceRouteEntry
>
_routing
;
private
bool
_isValidRouting
=
true
;
private
bool
_isValidRouting
=
true
;
...
@@ -281,6 +283,13 @@ namespace PcapDotNet.Packets.Gre
...
@@ -281,6 +283,13 @@ namespace PcapDotNet.Packets.Gre
public
const
int
SreLength
=
3
;
public
const
int
SreLength
=
3
;
}
}
public
int
Length
{
get
{
return
HeaderLength
+
PayloadLength
;
}
}
public
abstract
int
PayloadLength
{
get
;
}
internal
static
bool
TryReadEntry
(
byte
[]
buffer
,
ref
int
offset
,
int
length
,
out
GreSourceRouteEntry
entry
)
internal
static
bool
TryReadEntry
(
byte
[]
buffer
,
ref
int
offset
,
int
length
,
out
GreSourceRouteEntry
entry
)
{
{
entry
=
null
;
entry
=
null
;
...
@@ -351,6 +360,11 @@ namespace PcapDotNet.Packets.Gre
...
@@ -351,6 +360,11 @@ namespace PcapDotNet.Packets.Gre
public
class
GreSourceRouteEntryIp
:
GreSourceRouteEntry
public
class
GreSourceRouteEntryIp
:
GreSourceRouteEntry
{
{
public
override
int
PayloadLength
{
get
{
return
IpV4Address
.
SizeOf
;
}
}
public
ReadOnlyCollection
<
IpV4Address
>
Addresses
public
ReadOnlyCollection
<
IpV4Address
>
Addresses
{
{
get
{
return
_addresses
;
}
get
{
return
_addresses
;
}
...
@@ -378,6 +392,11 @@ namespace PcapDotNet.Packets.Gre
...
@@ -378,6 +392,11 @@ namespace PcapDotNet.Packets.Gre
public
class
GreSourceRouteEntryAs
:
GreSourceRouteEntry
public
class
GreSourceRouteEntryAs
:
GreSourceRouteEntry
{
{
public
override
int
PayloadLength
{
get
{
return
sizeof
(
ushort
);
}
}
public
ReadOnlyCollection
<
ushort
>
AsNumbers
public
ReadOnlyCollection
<
ushort
>
AsNumbers
{
{
get
{
return
_asNumbers
;
}
get
{
return
_asNumbers
;
}
...
@@ -405,6 +424,11 @@ namespace PcapDotNet.Packets.Gre
...
@@ -405,6 +424,11 @@ namespace PcapDotNet.Packets.Gre
public
class
GreSourceRouteEntryUnknown
:
GreSourceRouteEntry
public
class
GreSourceRouteEntryUnknown
:
GreSourceRouteEntry
{
{
public
override
int
PayloadLength
{
get
{
return
Data
.
Length
;
}
}
public
Datagram
Data
public
Datagram
Data
{
{
get
{
return
_data
;
}
get
{
return
_data
;
}
...
@@ -424,6 +448,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -424,6 +448,7 @@ namespace PcapDotNet.Packets.Gre
private
readonly
Datagram
_data
;
private
readonly
Datagram
_data
;
private
readonly
int
_offset
;
private
readonly
int
_offset
;
}
}
public
enum
GreSourceRouteEntryAddressFamily
:
ushort
public
enum
GreSourceRouteEntryAddressFamily
:
ushort
{
{
None
=
0x0000
,
None
=
0x0000
,
...
...
PcapDotNet/src/PcapDotNet.Packets/Gre/GreLayer.cs
0 → 100644
View file @
cc7cd211
using
System
;
using
System.Collections.ObjectModel
;
using
PcapDotNet.Packets.Ethernet
;
namespace
PcapDotNet.Packets.Gre
{
public
class
GreLayer
:
Layer
{
public
byte
RecursionControl
{
get
;
set
;
}
public
GreVersion
Version
{
get
;
set
;
}
public
EthernetType
ProtocolType
{
get
;
set
;
}
public
ushort
?
Checksum
{
get
;
set
;
}
public
ushort
?
RoutingOffset
{
get
;
set
;
}
public
uint
?
Key
{
get
;
set
;
}
public
uint
?
SequenceNumber
{
get
;
set
;
}
public
ReadOnlyCollection
<
GreSourceRouteEntry
>
Routing
{
get
;
set
;
}
public
override
int
Length
{
get
{
throw
new
NotImplementedException
();
}
}
public
override
void
Write
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
previousLayer
,
ILayer
nextLayer
)
{
GreDatagram
.
WriteHeader
(
buffer
,
offset
);
}
public
override
bool
Equals
(
Layer
other
)
{
throw
new
NotImplementedException
();
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/PcapDotNet.Packets.csproj
View file @
cc7cd211
...
@@ -74,6 +74,7 @@
...
@@ -74,6 +74,7 @@
<Compile
Include=
"Ethernet\MacAddress.cs"
/>
<Compile
Include=
"Ethernet\MacAddress.cs"
/>
<Compile
Include=
"Arp\IArpPreviousLayer.cs"
/>
<Compile
Include=
"Arp\IArpPreviousLayer.cs"
/>
<Compile
Include=
"Gre\GreDatagram.cs"
/>
<Compile
Include=
"Gre\GreDatagram.cs"
/>
<Compile
Include=
"Gre\GreLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpAddressMaskReplyDatagram.cs"
/>
<Compile
Include=
"Icmp\IcmpAddressMaskReplyDatagram.cs"
/>
<Compile
Include=
"Icmp\IcmpAddressMaskReplyLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpAddressMaskReplyLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpAddressMaskRequestLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpAddressMaskRequestLayer.cs"
/>
...
...
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