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
834ddc5a
Commit
834ddc5a
authored
Apr 28, 2010
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GRE
Code Coverage 96.16%
parent
690d4a9b
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
524 additions
and
383 deletions
+524
-383
UInt128Tests.cs
PcapDotNet/src/PcapDotNet.Base.Test/UInt128Tests.cs
+14
-15
OfflinePacketDeviceTests.cs
...tNet/src/PcapDotNet.Core.Test/OfflinePacketDeviceTests.cs
+7
-0
WiresharkCompareTests.cs
PcapDotNet/src/PcapDotNet.Core.Test/WiresharkCompareTests.cs
+13
-4
EthernetTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/EthernetTests.cs
+1
-0
GreTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/GreTests.cs
+11
-2
Datagram.cs
PcapDotNet/src/PcapDotNet.Packets/Datagram.cs
+2
-2
EthernetDatagram.cs
...otNet/src/PcapDotNet.Packets/Ethernet/EthernetDatagram.cs
+24
-37
EthernetPayloadDatagrams.cs
...c/PcapDotNet.Packets/Ethernet/EthernetPayloadDatagrams.cs
+66
-0
GreDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreDatagram.cs
+46
-322
GreLayer.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreLayer.cs
+2
-0
GreSourceRouteEntry.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntry.cs
+131
-0
GreSourceRouteEntryAddressFamily.cs
...capDotNet.Packets/Gre/GreSourceRouteEntryAddressFamily.cs
+9
-0
GreSourceRouteEntryAs.cs
...otNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntryAs.cs
+64
-0
GreSourceRouteEntryIp.cs
...otNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntryIp.cs
+65
-0
GreSourceRouteEntryUnknown.cs
.../src/PcapDotNet.Packets/Gre/GreSourceRouteEntryUnknown.cs
+46
-0
GreVersion.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreVersion.cs
+15
-0
PcapDotNet.Packets.csproj
PcapDotNet/src/PcapDotNet.Packets/PcapDotNet.Packets.csproj
+8
-1
No files found.
PcapDotNet/src/PcapDotNet.Base.Test/UInt128Tests.cs
View file @
834ddc5a
using
System
;
using
System.Globalization
;
using
System.Globalization
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
PcapDotNet.TestUtils
;
namespace
PcapDotNet.Base.Test
namespace
PcapDotNet.Base.Test
{
{
...
@@ -60,21 +62,18 @@ namespace PcapDotNet.Base.Test
...
@@ -60,21 +62,18 @@ namespace PcapDotNet.Base.Test
[
TestMethod
]
[
TestMethod
]
public
void
UInt128Test
()
public
void
UInt128Test
()
{
{
// Random random = new Random();
Random
random
=
new
Random
();
// for (int i = 0; i != 1000; ++i)
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
// {
{
// UInt48 value = random.NextUInt48();
UInt128
value
=
random
.
NextUInt128
();
//
// Assert.AreEqual(value, value);
Assert
.
AreEqual
(
value
,
value
);
// Assert.IsTrue(value == value);
Assert
.
IsTrue
(
value
==
value
);
// Assert.IsFalse(value != value);
Assert
.
IsFalse
(
value
!=
value
);
// Assert.IsNotNull(value.GetHashCode());
Assert
.
IsNotNull
(
value
.
GetHashCode
());
//
Assert
.
AreEqual
(
value
,
UInt128
.
Parse
(
value
.
ToString
(
"X32"
),
NumberStyles
.
HexNumber
,
CultureInfo
.
InvariantCulture
));
// if (value < uint.MaxValue)
Assert
.
AreEqual
(
value
>>
64
,
UInt128
.
Parse
(((
ulong
)(
value
>>
64
)).
ToString
(
"X16"
),
NumberStyles
.
HexNumber
,
CultureInfo
.
InvariantCulture
));
// Assert.AreEqual(value, uint.Parse(value.ToString()));
}
//
// Assert.AreEqual((byte)value, (byte)(value % 256));
// }
}
}
[
TestMethod
]
[
TestMethod
]
...
...
PcapDotNet/src/PcapDotNet.Core.Test/OfflinePacketDeviceTests.cs
View file @
834ddc5a
...
@@ -243,6 +243,13 @@ namespace PcapDotNet.Core.Test
...
@@ -243,6 +243,13 @@ namespace PcapDotNet.Core.Test
{
{
OpenOfflineDevice
(
10
,
_random
.
NextEthernetPacket
(
100
),
TimeSpan
.
Zero
,
"??"
);
OpenOfflineDevice
(
10
,
_random
.
NextEthernetPacket
(
100
),
TimeSpan
.
Zero
,
"??"
);
}
}
[
TestMethod
]
[
ExpectedException
(
typeof
(
InvalidOperationException
))]
public
void
EmptyNameTest
()
{
OpenOfflineDevice
(
10
,
_random
.
NextEthernetPacket
(
100
),
TimeSpan
.
Zero
,
string
.
Empty
);
}
private
static
void
TestGetSomePackets
(
int
numPacketsToSend
,
int
numPacketsToGet
,
int
numPacketsToBreakLoop
,
private
static
void
TestGetSomePackets
(
int
numPacketsToSend
,
int
numPacketsToGet
,
int
numPacketsToBreakLoop
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
PacketCommunicatorReceiveResult
expectedResult
,
int
expectedNumPackets
,
...
...
PcapDotNet/src/PcapDotNet.Core.Test/WiresharkCompareTests.cs
View file @
834ddc5a
...
@@ -151,7 +151,7 @@ namespace PcapDotNet.Core.Test
...
@@ -151,7 +151,7 @@ namespace PcapDotNet.Core.Test
// Version = GreVersion.EnhancedGre,
// Version = GreVersion.EnhancedGre,
// };
// };
// IEnumerable<ILayer> grePayloadLayers = random.NextIcmpPayloadLayers(icmpLayer);
// IEnumerable<ILayer> grePayloadLayers = random.NextIcmpPayloadLayers(icmpLayer);
return
PacketBuilder
.
Build
(
packetTimestamp
,
new
ILayer
[]
{
ethernetLayer
,
ipV4Layer
,
greLayer
}
);
return
PacketBuilder
.
Build
(
packetTimestamp
,
ethernetLayer
,
ipV4Layer
,
greLayer
,
payloadLayer
);
case
PacketType
.
Udp
:
case
PacketType
.
Udp
:
ethernetLayer
.
EtherType
=
EthernetType
.
None
;
ethernetLayer
.
EtherType
=
EthernetType
.
None
;
...
@@ -181,7 +181,7 @@ namespace PcapDotNet.Core.Test
...
@@ -181,7 +181,7 @@ namespace PcapDotNet.Core.Test
private
static
void
ComparePacketsToWireshark
(
IEnumerable
<
Packet
>
packets
)
private
static
void
ComparePacketsToWireshark
(
IEnumerable
<
Packet
>
packets
)
{
{
string
pcapFilename
=
Path
.
GetTempPath
()
+
"temp."
+
new
Random
().
Next
UShort
()
+
".pcap"
;
string
pcapFilename
=
Path
.
GetTempPath
()
+
"temp."
+
new
Random
().
Next
Byte
()
+
".pcap"
;
PacketDumpFile
.
Dump
(
pcapFilename
,
new
PcapDataLink
(
DataLinkKind
.
Ethernet
),
PacketDevice
.
DefaultSnapshotLength
,
packets
);
PacketDumpFile
.
Dump
(
pcapFilename
,
new
PcapDataLink
(
DataLinkKind
.
Ethernet
),
PacketDevice
.
DefaultSnapshotLength
,
packets
);
// List<Packet> packetsList = new List<Packet>();
// List<Packet> packetsList = new List<Packet>();
// new OfflinePacketDevice(pcapFilename).Open().ReceivePackets(1000, packetsList.Add);
// new OfflinePacketDevice(pcapFilename).Open().ReceivePackets(1000, packetsList.Add);
...
@@ -191,8 +191,8 @@ namespace PcapDotNet.Core.Test
...
@@ -191,8 +191,8 @@ namespace PcapDotNet.Core.Test
string
documentFilename
=
pcapFilename
+
".pdml"
;
string
documentFilename
=
pcapFilename
+
".pdml"
;
using
(
Process
process
=
new
Process
())
using
(
Process
process
=
new
Process
())
{
{
process
.
StartInfo
=
new
ProcessStartInfo
()
process
.
StartInfo
=
new
ProcessStartInfo
{
{
FileName
=
WiresharkTsharkPath
,
FileName
=
WiresharkTsharkPath
,
Arguments
=
"-o udp.check_checksum:TRUE "
+
Arguments
=
"-o udp.check_checksum:TRUE "
+
"-o tcp.relative_sequence_numbers:FALSE "
+
"-o tcp.relative_sequence_numbers:FALSE "
+
...
@@ -970,6 +970,15 @@ namespace PcapDotNet.Core.Test
...
@@ -970,6 +970,15 @@ namespace PcapDotNet.Core.Test
field
.
AssertShowHex
(
greDatagram
.
Key
);
field
.
AssertShowHex
(
greDatagram
.
Key
);
break
;
break
;
case
"data"
:
case
"data.data"
:
field
.
AssertValue
(
greDatagram
.
Payload
);
break
;
case
"data.len"
:
field
.
AssertShowDecimal
(
greDatagram
.
Payload
.
Length
);
break
;
default
:
default
:
Assert
.
Fail
(
"Invalid field name: "
+
field
.
Name
());
Assert
.
Fail
(
"Invalid field name: "
+
field
.
Name
());
break
;
break
;
...
...
PcapDotNet/src/PcapDotNet.Packets.Test/EthernetTests.cs
View file @
834ddc5a
...
@@ -63,6 +63,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -63,6 +63,7 @@ namespace PcapDotNet.Packets.Test
Packet
packet
=
new
PacketBuilder
(
ethernetLayer
,
payloadLayer
).
Build
(
DateTime
.
Now
);
Packet
packet
=
new
PacketBuilder
(
ethernetLayer
,
payloadLayer
).
Build
(
DateTime
.
Now
);
// Ethernet
// Ethernet
Assert
.
IsTrue
(
packet
.
IsValid
,
"IsValid"
);
Assert
.
AreEqual
(
packet
.
Length
-
EthernetDatagram
.
HeaderLength
,
packet
.
Ethernet
.
PayloadLength
,
"PayloadLength"
);
Assert
.
AreEqual
(
packet
.
Length
-
EthernetDatagram
.
HeaderLength
,
packet
.
Ethernet
.
PayloadLength
,
"PayloadLength"
);
Assert
.
AreEqual
(
ethernetLayer
,
packet
.
Ethernet
.
ExtractLayer
(),
"Ethernet Layer"
);
Assert
.
AreEqual
(
ethernetLayer
,
packet
.
Ethernet
.
ExtractLayer
(),
"Ethernet Layer"
);
Assert
.
AreEqual
(
ethernetLayer
.
GetHashCode
(),
packet
.
Ethernet
.
ExtractLayer
().
GetHashCode
(),
"Ethernet Layer Hash Code"
);
Assert
.
AreEqual
(
ethernetLayer
.
GetHashCode
(),
packet
.
Ethernet
.
ExtractLayer
().
GetHashCode
(),
"Ethernet Layer Hash Code"
);
...
...
PcapDotNet/src/PcapDotNet.Packets.Test/GreTests.cs
View file @
834ddc5a
...
@@ -71,8 +71,9 @@ namespace PcapDotNet.Packets.Test
...
@@ -71,8 +71,9 @@ namespace PcapDotNet.Packets.Test
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
for
(
int
i
=
0
;
i
!=
100
;
++
i
)
{
{
GreLayer
greLayer
=
random
.
NextGreLayer
();
GreLayer
greLayer
=
random
.
NextGreLayer
();
PayloadLayer
payloadLayer
=
random
.
NextPayloadLayer
(
random
.
Next
(
100
));
PacketBuilder
packetBuilder
=
new
PacketBuilder
(
ethernetLayer
,
ipV4Layer
,
greLayer
);
PacketBuilder
packetBuilder
=
new
PacketBuilder
(
ethernetLayer
,
ipV4Layer
,
greLayer
,
payloadLayer
);
Packet
packet
=
packetBuilder
.
Build
(
DateTime
.
Now
);
Packet
packet
=
packetBuilder
.
Build
(
DateTime
.
Now
);
if
(
greLayer
.
Checksum
==
null
)
if
(
greLayer
.
Checksum
==
null
)
...
@@ -89,7 +90,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -89,7 +90,7 @@ namespace PcapDotNet.Packets.Test
ipV4Layer
.
HeaderChecksum
=
null
;
ipV4Layer
.
HeaderChecksum
=
null
;
Assert
.
AreEqual
(
ipV4Layer
.
Length
,
packet
.
Ethernet
.
IpV4
.
HeaderLength
);
Assert
.
AreEqual
(
ipV4Layer
.
Length
,
packet
.
Ethernet
.
IpV4
.
HeaderLength
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
IsHeaderChecksumCorrect
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
IsHeaderChecksumCorrect
);
Assert
.
AreEqual
(
ipV4Layer
.
Length
+
greLayer
.
Length
,
Assert
.
AreEqual
(
ipV4Layer
.
Length
+
greLayer
.
Length
+
payloadLayer
.
Length
,
packet
.
Ethernet
.
IpV4
.
TotalLength
);
packet
.
Ethernet
.
IpV4
.
TotalLength
);
Assert
.
AreEqual
(
IpV4Datagram
.
DefaultVersion
,
packet
.
Ethernet
.
IpV4
.
Version
);
Assert
.
AreEqual
(
IpV4Datagram
.
DefaultVersion
,
packet
.
Ethernet
.
IpV4
.
Version
);
...
@@ -102,6 +103,14 @@ namespace PcapDotNet.Packets.Test
...
@@ -102,6 +103,14 @@ namespace PcapDotNet.Packets.Test
greLayer
.
Checksum
=
actualGre
.
Checksum
;
greLayer
.
Checksum
=
actualGre
.
Checksum
;
}
}
Assert
.
AreEqual
(
greLayer
,
actualGreLayer
,
"Layer"
);
Assert
.
AreEqual
(
greLayer
,
actualGreLayer
,
"Layer"
);
if
(
actualGreLayer
.
Key
!=
null
)
actualGreLayer
.
SetKey
(
actualGreLayer
.
KeyPayloadLength
.
Value
,
actualGreLayer
.
KeyCallId
.
Value
);
else
{
Assert
.
IsNull
(
actualGreLayer
.
KeyPayloadLength
);
Assert
.
IsNull
(
actualGreLayer
.
KeyCallId
);
}
Assert
.
AreEqual
(
greLayer
,
actualGreLayer
,
"Layer"
);
Assert
.
AreNotEqual
(
random
.
NextGreLayer
(),
actualGreLayer
,
"Not Layer"
);
Assert
.
AreNotEqual
(
random
.
NextGreLayer
(),
actualGreLayer
,
"Not Layer"
);
Assert
.
AreEqual
(
greLayer
.
Length
,
actualGre
.
HeaderLength
);
Assert
.
AreEqual
(
greLayer
.
Length
,
actualGre
.
HeaderLength
);
Assert
.
IsTrue
(
actualGre
.
KeyPresent
^
(
greLayer
.
Key
==
null
));
Assert
.
IsTrue
(
actualGre
.
KeyPresent
^
(
greLayer
.
Key
==
null
));
...
...
PcapDotNet/src/PcapDotNet.Packets/Datagram.cs
View file @
834ddc5a
...
@@ -149,7 +149,7 @@ namespace PcapDotNet.Packets
...
@@ -149,7 +149,7 @@ namespace PcapDotNet.Packets
/// The original buffer that holds all the data for the datagram.
/// The original buffer that holds all the data for the datagram.
/// </summary>
/// </summary>
[
System
.
Diagnostics
.
CodeAnalysis
.
SuppressMessage
(
"Microsoft.Performance"
,
"CA1819:PropertiesShouldNotReturnArrays"
)]
[
System
.
Diagnostics
.
CodeAnalysis
.
SuppressMessage
(
"Microsoft.Performance"
,
"CA1819:PropertiesShouldNotReturnArrays"
)]
protected
byte
[]
Buffer
internal
byte
[]
Buffer
{
{
get
{
return
_buffer
;
}
get
{
return
_buffer
;
}
}
}
...
@@ -157,7 +157,7 @@ namespace PcapDotNet.Packets
...
@@ -157,7 +157,7 @@ namespace PcapDotNet.Packets
/// <summary>
/// <summary>
/// The offset of the first byte of the datagram in the buffer.
/// The offset of the first byte of the datagram in the buffer.
/// </summary>
/// </summary>
protected
int
StartOffset
internal
int
StartOffset
{
{
get
{
return
_startOffset
;
}
get
{
return
_startOffset
;
}
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Ethernet/EthernetDatagram.cs
View file @
834ddc5a
...
@@ -39,19 +39,6 @@ namespace PcapDotNet.Packets.Ethernet
...
@@ -39,19 +39,6 @@ namespace PcapDotNet.Packets.Ethernet
get
{
return
_broadcastAddress
;
}
get
{
return
_broadcastAddress
;
}
}
}
/// <summary>
/// The Ethernet payload.
/// </summary>
public
Datagram
Payload
{
get
{
if
(
_payload
==
null
&&
Length
>=
HeaderLength
)
_payload
=
new
Datagram
(
Buffer
,
StartOffset
+
HeaderLength
,
Length
-
HeaderLength
);
return
_payload
;
}
}
/// <summary>
/// <summary>
/// The Ethernet payload length in bytes.
/// The Ethernet payload length in bytes.
/// </summary>
/// </summary>
...
@@ -100,17 +87,20 @@ namespace PcapDotNet.Packets.Ethernet
...
@@ -100,17 +87,20 @@ namespace PcapDotNet.Packets.Ethernet
};
};
}
}
/// <summary>
/// The Ethernet payload.
/// </summary>
public
Datagram
Payload
{
get
{
return
PayloadDatagrams
.
Payload
;
}
}
/// <summary>
/// <summary>
/// The Ethernet payload as an IPv4 datagram.
/// The Ethernet payload as an IPv4 datagram.
/// </summary>
/// </summary>
public
IpV4Datagram
IpV4
public
IpV4Datagram
IpV4
{
{
get
get
{
return
PayloadDatagrams
.
IpV4
;
}
{
if
(
_ipV4
==
null
&&
Length
>=
HeaderLength
)
_ipV4
=
new
IpV4Datagram
(
Buffer
,
StartOffset
+
HeaderLength
,
Length
-
HeaderLength
);
return
_ipV4
;
}
}
}
/// <summary>
/// <summary>
...
@@ -118,12 +108,7 @@ namespace PcapDotNet.Packets.Ethernet
...
@@ -118,12 +108,7 @@ namespace PcapDotNet.Packets.Ethernet
/// </summary>
/// </summary>
public
ArpDatagram
Arp
public
ArpDatagram
Arp
{
{
get
get
{
return
PayloadDatagrams
.
Arp
;
}
{
if
(
_arp
==
null
&&
Length
>=
HeaderLength
)
_arp
=
ArpDatagram
.
CreateInstance
(
Buffer
,
StartOffset
+
HeaderLength
,
Length
-
HeaderLength
);
return
_arp
;
}
}
}
internal
EthernetDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
internal
EthernetDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
...
@@ -146,22 +131,24 @@ namespace PcapDotNet.Packets.Ethernet
...
@@ -146,22 +131,24 @@ namespace PcapDotNet.Packets.Ethernet
if
(
Length
<
HeaderLength
)
if
(
Length
<
HeaderLength
)
return
false
;
return
false
;
switch
(
EtherType
)
return
PayloadDatagrams
.
Get
(
EtherType
).
IsValid
;
{
}
case
EthernetType
.
Arp
:
return
Arp
.
IsValid
;
case
EthernetType
.
IpV4
:
return
IpV4
.
IsValid
;
default
:
private
EthernetPayloadDatagrams
PayloadDatagrams
return
true
;
{
get
{
if
(
_payloadDatagrams
==
null
)
{
_payloadDatagrams
=
new
EthernetPayloadDatagrams
(
Length
>=
HeaderLength
?
new
Datagram
(
Buffer
,
StartOffset
+
HeaderLength
,
Length
-
HeaderLength
)
:
null
);
}
return
_payloadDatagrams
;
}
}
}
}
private
static
readonly
MacAddress
_broadcastAddress
=
new
MacAddress
(
"FF:FF:FF:FF:FF:FF"
);
private
static
readonly
MacAddress
_broadcastAddress
=
new
MacAddress
(
"FF:FF:FF:FF:FF:FF"
);
private
Datagram
_payload
;
private
EthernetPayloadDatagrams
_payloadDatagrams
;
private
IpV4Datagram
_ipV4
;
private
ArpDatagram
_arp
;
}
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Ethernet/EthernetPayloadDatagrams.cs
0 → 100644
View file @
834ddc5a
using
PcapDotNet.Packets.Arp
;
using
PcapDotNet.Packets.IpV4
;
namespace
PcapDotNet.Packets.Ethernet
{
internal
class
EthernetPayloadDatagrams
{
public
EthernetPayloadDatagrams
(
Datagram
payload
)
{
_payload
=
payload
;
}
public
Datagram
Get
(
EthernetType
ethernetType
)
{
switch
(
ethernetType
)
{
case
EthernetType
.
Arp
:
return
Arp
;
case
EthernetType
.
IpV4
:
return
IpV4
;
default
:
return
Payload
;
}
}
/// <summary>
/// The Ethernet payload as an IPv4 datagram.
/// </summary>
public
IpV4Datagram
IpV4
{
get
{
if
(
_ipV4
==
null
&&
_payload
!=
null
)
_ipV4
=
new
IpV4Datagram
(
_payload
.
Buffer
,
_payload
.
StartOffset
,
_payload
.
Length
);
return
_ipV4
;
}
}
/// <summary>
/// The Ethernet payload as an ARP datagram.
/// </summary>
public
ArpDatagram
Arp
{
get
{
if
(
_arp
==
null
&&
_payload
!=
null
)
_arp
=
ArpDatagram
.
CreateInstance
(
_payload
.
Buffer
,
_payload
.
StartOffset
,
_payload
.
Length
);
return
_arp
;
}
}
/// <summary>
/// The Ethernet payload.
/// </summary>
public
Datagram
Payload
{
get
{
return
_payload
;
}
}
private
readonly
Datagram
_payload
;
private
IpV4Datagram
_ipV4
;
private
ArpDatagram
_arp
;
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Gre/GreDatagram.cs
View file @
834ddc5a
This diff is collapsed.
Click to expand it.
PcapDotNet/src/PcapDotNet.Packets/Gre/GreLayer.cs
View file @
834ddc5a
...
@@ -15,6 +15,8 @@ namespace PcapDotNet.Packets.Gre
...
@@ -15,6 +15,8 @@ namespace PcapDotNet.Packets.Gre
public
bool
ChecksumPresent
{
get
;
set
;
}
public
bool
ChecksumPresent
{
get
;
set
;
}
public
ushort
?
Checksum
{
get
;
set
;
}
public
ushort
?
Checksum
{
get
;
set
;
}
public
uint
?
Key
{
get
;
set
;
}
public
uint
?
Key
{
get
;
set
;
}
public
ushort
?
KeyPayloadLength
{
get
{
return
Key
==
null
?
null
:
(
ushort
?)((
Key
&
0xFFFF0000
)
>>
16
);
}
}
public
ushort
?
KeyCallId
{
get
{
return
Key
==
null
?
null
:
(
ushort
?)(
Key
&
0x0000FFFF
);
}
}
public
void
SetKey
(
ushort
keyPayloadLength
,
ushort
keyCallId
)
public
void
SetKey
(
ushort
keyPayloadLength
,
ushort
keyCallId
)
{
{
Key
=
(
uint
)((
keyPayloadLength
<<
16
)
|
keyCallId
);
Key
=
(
uint
)((
keyPayloadLength
<<
16
)
|
keyCallId
);
...
...
PcapDotNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntry.cs
0 → 100644
View file @
834ddc5a
using
System
;
using
PcapDotNet.Packets.IpV4
;
namespace
PcapDotNet.Packets.Gre
{
/// <summary>
/// <pre>
/// +-----+----------------+------------+------------+
/// | Bit | 0-15 | 16-23 | 24-31 |
/// +-----+----------------+------------+------------+
/// | 0 | Address Family | SRE Offset | SRE Length |
/// +-----+----------------+------------+------------+
/// | 32 | Routing Information ... |
/// +-----+------------------------------------------+
/// </pre>
/// </summary>
public
abstract
class
GreSourceRouteEntry
:
IEquatable
<
GreSourceRouteEntry
>
{
public
abstract
GreSourceRouteEntryAddressFamily
AddressFamily
{
get
;
}
public
const
int
HeaderLength
=
4
;
private
static
class
Offset
{
public
const
int
AddressFamily
=
0
;
public
const
int
SreOffset
=
2
;
public
const
int
SreLength
=
3
;
}
public
int
Length
{
get
{
return
HeaderLength
+
PayloadLength
;
}
}
public
abstract
byte
PayloadOffset
{
get
;
}
public
abstract
byte
PayloadLength
{
get
;
}
public
bool
Equals
(
GreSourceRouteEntry
other
)
{
return
other
!=
null
&&
AddressFamily
==
other
.
AddressFamily
&&
Length
==
other
.
Length
&&
PayloadOffset
==
other
.
PayloadOffset
&&
EqualsPayloads
(
other
);
}
public
override
bool
Equals
(
object
obj
)
{
return
Equals
(
obj
as
GreSourceRouteEntry
);
}
protected
abstract
bool
EqualsPayloads
(
GreSourceRouteEntry
other
);
protected
abstract
void
WritePayload
(
byte
[]
buffer
,
int
offset
);
internal
static
bool
TryReadEntry
(
byte
[]
buffer
,
ref
int
offset
,
int
length
,
out
GreSourceRouteEntry
entry
)
{
entry
=
null
;
if
(
length
<
HeaderLength
)
return
false
;
// Address Family
GreSourceRouteEntryAddressFamily
addressFamily
=
(
GreSourceRouteEntryAddressFamily
)
buffer
.
ReadUShort
(
offset
+
Offset
.
AddressFamily
,
Endianity
.
Big
);
// SRE Length
byte
sreLength
=
buffer
[
offset
+
Offset
.
SreLength
];
if
(
sreLength
==
0
)
return
addressFamily
==
GreSourceRouteEntryAddressFamily
.
None
;
if
(
HeaderLength
+
sreLength
>
length
)
return
false
;
// SRE Offset
byte
sreOffset
=
buffer
[
offset
+
Offset
.
SreOffset
];
if
(
sreOffset
>
sreLength
)
return
false
;
// Entry
if
(!
TryReadEntry
(
buffer
,
offset
+
HeaderLength
,
sreLength
,
addressFamily
,
sreOffset
,
out
entry
))
return
false
;
// Change offset
offset
+=
entry
.
Length
;
return
true
;
}
internal
void
Write
(
byte
[]
buffer
,
ref
int
offset
)
{
buffer
.
Write
(
offset
+
Offset
.
AddressFamily
,
(
ushort
)
AddressFamily
,
Endianity
.
Big
);
buffer
.
Write
(
offset
+
Offset
.
SreOffset
,
PayloadOffset
);
buffer
.
Write
(
offset
+
Offset
.
SreLength
,
(
byte
)
PayloadLength
);
WritePayload
(
buffer
,
offset
+
HeaderLength
);
offset
+=
Length
;
}
private
static
bool
TryReadEntry
(
byte
[]
buffer
,
int
payloadOffset
,
int
payloadLength
,
GreSourceRouteEntryAddressFamily
addressFamily
,
int
offsetInPayload
,
out
GreSourceRouteEntry
entry
)
{
entry
=
null
;
switch
(
addressFamily
)
{
case
GreSourceRouteEntryAddressFamily
.
IpSourceRoute
:
if
(
offsetInPayload
%
IpV4Address
.
SizeOf
!=
0
||
payloadLength
%
IpV4Address
.
SizeOf
!=
0
)
return
false
;
int
numAddresses
=
payloadLength
/
IpV4Address
.
SizeOf
;
IpV4Address
[]
addresses
=
new
IpV4Address
[
numAddresses
];
for
(
int
i
=
0
;
i
!=
numAddresses
;
++
i
)
addresses
[
i
]
=
buffer
.
ReadIpV4Address
(
payloadOffset
+
i
*
IpV4Address
.
SizeOf
,
Endianity
.
Big
);
entry
=
new
GreSourceRouteEntryIp
(
addresses
,
offsetInPayload
/
IpV4Address
.
SizeOf
);
return
true
;
case
GreSourceRouteEntryAddressFamily
.
AsSourceRoute
:
if
(
offsetInPayload
%
sizeof
(
ushort
)
!=
0
||
payloadLength
%
sizeof
(
ushort
)
!=
0
)
return
false
;
int
numAsNumbers
=
payloadLength
/
sizeof
(
ushort
);
ushort
[]
asNumbers
=
new
ushort
[
numAsNumbers
];
for
(
int
i
=
0
;
i
!=
numAsNumbers
;
++
i
)
asNumbers
[
i
]
=
buffer
.
ReadUShort
(
payloadOffset
+
i
*
sizeof
(
ushort
),
Endianity
.
Big
);
entry
=
new
GreSourceRouteEntryAs
(
asNumbers
,
offsetInPayload
/
sizeof
(
ushort
));
return
true
;
default
:
Datagram
data
=
new
Datagram
(
buffer
,
payloadOffset
,
payloadLength
);
entry
=
new
GreSourceRouteEntryUnknown
(
addressFamily
,
data
,
offsetInPayload
);
return
true
;
}
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntryAddressFamily.cs
0 → 100644
View file @
834ddc5a
namespace
PcapDotNet.Packets.Gre
{
public
enum
GreSourceRouteEntryAddressFamily
:
ushort
{
None
=
0x0000
,
IpSourceRoute
=
0x0800
,
AsSourceRoute
=
0xfffe
,
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntryAs.cs
0 → 100644
View file @
834ddc5a
using
System.Collections.ObjectModel
;
using
System.Linq
;
using
PcapDotNet.Base
;
namespace
PcapDotNet.Packets.Gre
{
public
class
GreSourceRouteEntryAs
:
GreSourceRouteEntry
{
public
GreSourceRouteEntryAs
(
ReadOnlyCollection
<
ushort
>
asNumbers
,
int
nextAsNumberIndex
)
{
_asNumbers
=
asNumbers
;
_nextAsNumberIndex
=
nextAsNumberIndex
;
}
public
override
GreSourceRouteEntryAddressFamily
AddressFamily
{
get
{
return
GreSourceRouteEntryAddressFamily
.
AsSourceRoute
;
}
}
public
override
byte
PayloadLength
{
get
{
return
(
byte
)(
AsNumbers
.
Count
*
sizeof
(
ushort
));
}
}
public
override
byte
PayloadOffset
{
get
{
return
(
byte
)(
NextAsNumberIndex
*
sizeof
(
ushort
));
}
}
protected
override
bool
EqualsPayloads
(
GreSourceRouteEntry
other
)
{
return
AsNumbers
.
SequenceEqual
(((
GreSourceRouteEntryAs
)
other
).
AsNumbers
);
}
public
ReadOnlyCollection
<
ushort
>
AsNumbers
{
get
{
return
_asNumbers
;
}
}
public
int
NextAsNumberIndex
{
get
{
return
_nextAsNumberIndex
;
}
}
public
ushort
NextAsNumber
{
get
{
return
AsNumbers
[
NextAsNumberIndex
];
}
}
protected
override
void
WritePayload
(
byte
[]
buffer
,
int
offset
)
{
foreach
(
ushort
asNumber
in
AsNumbers
)
buffer
.
Write
(
ref
offset
,
asNumber
,
Endianity
.
Big
);
}
internal
GreSourceRouteEntryAs
(
ushort
[]
asNumbers
,
int
nextAsNumberIndex
)
:
this
(
asNumbers
.
AsReadOnly
(),
nextAsNumberIndex
)
{
}
private
readonly
ReadOnlyCollection
<
ushort
>
_asNumbers
;
private
readonly
int
_nextAsNumberIndex
;
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntryIp.cs
0 → 100644
View file @
834ddc5a
using
System.Collections.ObjectModel
;
using
System.Linq
;
using
PcapDotNet.Base
;
using
PcapDotNet.Packets.IpV4
;
namespace
PcapDotNet.Packets.Gre
{
public
class
GreSourceRouteEntryIp
:
GreSourceRouteEntry
{
public
GreSourceRouteEntryIp
(
ReadOnlyCollection
<
IpV4Address
>
addresses
,
int
nextAddressIndex
)
{
_addresses
=
addresses
;
_nextAddressIndex
=
nextAddressIndex
;
}
public
override
GreSourceRouteEntryAddressFamily
AddressFamily
{
get
{
return
GreSourceRouteEntryAddressFamily
.
IpSourceRoute
;
}
}
public
override
byte
PayloadLength
{
get
{
return
(
byte
)(
Addresses
.
Count
*
IpV4Address
.
SizeOf
);
}
}
public
override
byte
PayloadOffset
{
get
{
return
(
byte
)(
NextAddressIndex
*
IpV4Address
.
SizeOf
);
}
}
protected
override
bool
EqualsPayloads
(
GreSourceRouteEntry
other
)
{
return
Addresses
.
SequenceEqual
(((
GreSourceRouteEntryIp
)
other
).
Addresses
);
}
protected
override
void
WritePayload
(
byte
[]
buffer
,
int
offset
)
{
foreach
(
IpV4Address
address
in
Addresses
)
buffer
.
Write
(
ref
offset
,
address
,
Endianity
.
Big
);
}
public
ReadOnlyCollection
<
IpV4Address
>
Addresses
{
get
{
return
_addresses
;
}
}
public
int
NextAddressIndex
{
get
{
return
_nextAddressIndex
;
}
}
public
IpV4Address
NextAddress
{
get
{
return
Addresses
[
NextAddressIndex
];
}
}
internal
GreSourceRouteEntryIp
(
IpV4Address
[]
addresses
,
int
nextAddressIndex
)
:
this
(
addresses
.
AsReadOnly
(),
nextAddressIndex
)
{
}
private
readonly
ReadOnlyCollection
<
IpV4Address
>
_addresses
;
private
readonly
int
_nextAddressIndex
;
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Gre/GreSourceRouteEntryUnknown.cs
0 → 100644
View file @
834ddc5a
namespace
PcapDotNet.Packets.Gre
{
public
class
GreSourceRouteEntryUnknown
:
GreSourceRouteEntry
{
public
GreSourceRouteEntryUnknown
(
GreSourceRouteEntryAddressFamily
addressFamily
,
Datagram
data
,
int
offset
)
{
_addressFamily
=
addressFamily
;
_data
=
data
;
_offset
=
offset
;
}
public
override
GreSourceRouteEntryAddressFamily
AddressFamily
{
get
{
return
_addressFamily
;
}
}
public
override
byte
PayloadLength
{
get
{
return
(
byte
)
Data
.
Length
;
}
}
public
override
byte
PayloadOffset
{
get
{
return
(
byte
)
_offset
;
}
}
public
Datagram
Data
{
get
{
return
_data
;
}
}
protected
override
bool
EqualsPayloads
(
GreSourceRouteEntry
other
)
{
return
Data
.
Equals
(((
GreSourceRouteEntryUnknown
)
other
).
Data
);
}
protected
override
void
WritePayload
(
byte
[]
buffer
,
int
offset
)
{
buffer
.
Write
(
offset
,
Data
);
}
private
readonly
GreSourceRouteEntryAddressFamily
_addressFamily
;
private
readonly
Datagram
_data
;
private
readonly
int
_offset
;
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Gre/GreVersion.cs
0 → 100644
View file @
834ddc5a
namespace
PcapDotNet.Packets.Gre
{
public
enum
GreVersion
:
byte
{
/// <summary>
/// RFC 2784
/// </summary>
Gre
=
0x00
,
/// <summary>
/// RFC 2637
/// </summary>
EnhancedGre
=
0x01
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/PcapDotNet.Packets.csproj
View file @
834ddc5a
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
<PropertyGroup>
<PropertyGroup>
<Configuration
Condition=
" '$(Configuration)' == '' "
>
Debug
</Configuration>
<Configuration
Condition=
" '$(Configuration)' == '' "
>
Debug
</Configuration>
<Platform
Condition=
" '$(Platform)' == '' "
>
AnyCPU
</Platform>
<Platform
Condition=
" '$(Platform)' == '' "
>
AnyCPU
</Platform>
<ProductVersion>
9.0.
21022
</ProductVersion>
<ProductVersion>
9.0.
30729
</ProductVersion>
<SchemaVersion>
2.0
</SchemaVersion>
<SchemaVersion>
2.0
</SchemaVersion>
<ProjectGuid>
{8A184AF5-E46C-482C-81A3-76D8CE290104}
</ProjectGuid>
<ProjectGuid>
{8A184AF5-E46C-482C-81A3-76D8CE290104}
</ProjectGuid>
<OutputType>
Library
</OutputType>
<OutputType>
Library
</OutputType>
...
@@ -70,11 +70,18 @@
...
@@ -70,11 +70,18 @@
<Compile
Include=
"Endianity.cs"
/>
<Compile
Include=
"Endianity.cs"
/>
<Compile
Include=
"Ethernet\EthernetLayer.cs"
/>
<Compile
Include=
"Ethernet\EthernetLayer.cs"
/>
<Compile
Include=
"Ethernet\EthernetDatagram.cs"
/>
<Compile
Include=
"Ethernet\EthernetDatagram.cs"
/>
<Compile
Include=
"Ethernet\EthernetPayloadDatagrams.cs"
/>
<Compile
Include=
"Ethernet\EthernetType.cs"
/>
<Compile
Include=
"Ethernet\EthernetType.cs"
/>
<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=
"Gre\GreLayer.cs"
/>
<Compile
Include=
"Gre\GreSourceRouteEntry.cs"
/>
<Compile
Include=
"Gre\GreSourceRouteEntryAddressFamily.cs"
/>
<Compile
Include=
"Gre\GreSourceRouteEntryAs.cs"
/>
<Compile
Include=
"Gre\GreSourceRouteEntryIp.cs"
/>
<Compile
Include=
"Gre\GreSourceRouteEntryUnknown.cs"
/>
<Compile
Include=
"Gre\GreVersion.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