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
2eef92c2
Commit
2eef92c2
authored
Feb 12, 2010
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ICMP
parent
bab1a144
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
175 additions
and
75 deletions
+175
-75
IcmpTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/IcmpTests.cs
+77
-56
IcmpAddressMaskReplyDatagram.cs
...c/PcapDotNet.Packets/Icmp/IcmpAddressMaskReplyDatagram.cs
+14
-0
IcmpAddressMaskRequestLayer.cs
...rc/PcapDotNet.Packets/Icmp/IcmpAddressMaskRequestLayer.cs
+2
-2
IcmpDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpDatagram.cs
+2
-0
IcmpLayer.cs
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpLayer.cs
+7
-2
IcmpRouterAdvertisementDatagram.cs
...capDotNet.Packets/Icmp/IcmpRouterAdvertisementDatagram.cs
+1
-1
IcmpRouterAdvertisementLayer.cs
...c/PcapDotNet.Packets/Icmp/IcmpRouterAdvertisementLayer.cs
+2
-2
IcmpRouterSolicitationDatagram.cs
...PcapDotNet.Packets/Icmp/IcmpRouterSolicitationDatagram.cs
+27
-0
IcmpSourceQuenchDatagram.cs
...t/src/PcapDotNet.Packets/Icmp/IcmpSourceQuenchDatagram.cs
+2
-1
IcmpTimestampLayer.cs
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpTimestampLayer.cs
+2
-2
IcmpTimestampReplyDatagram.cs
...src/PcapDotNet.Packets/Icmp/IcmpTimestampReplyDatagram.cs
+18
-0
IcmpTracerouteLayer.cs
...DotNet/src/PcapDotNet.Packets/Icmp/IcmpTracerouteLayer.cs
+2
-2
IcmpUnknownDatagram.cs
...DotNet/src/PcapDotNet.Packets/Icmp/IcmpUnknownDatagram.cs
+2
-7
IcmpUnknownLayer.cs
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpUnknownLayer.cs
+16
-0
PcapDotNet.Packets.csproj
PcapDotNet/src/PcapDotNet.Packets/PcapDotNet.Packets.csproj
+1
-0
No files found.
PcapDotNet/src/PcapDotNet.Packets.Test/IcmpTests.cs
View file @
2eef92c2
...
...
@@ -79,7 +79,7 @@ namespace PcapDotNet.Packets.Test
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
ipV4Layer
.
HeaderChecksum
=
null
;
for
(
int
i
=
0
;
i
!=
1
000
;
++
i
)
for
(
int
i
=
0
;
i
!=
2
000
;
++
i
)
{
IcmpLayer
icmpLayer
=
random
.
NextIcmpLayer
();
icmpLayer
.
Checksum
=
null
;
...
...
@@ -103,7 +103,8 @@ namespace PcapDotNet.Packets.Test
icmpIpV4PayloadLayers
=
new
[]
{
random
.
NextPayloadLayer
(
IcmpConversionFailedDatagram
.
OriginalDatagramLengthForUnsupportedTransportProtocol
-
icmpIpV4Layer
.
Length
)
IcmpConversionFailedDatagram
.
OriginalDatagramLengthForUnsupportedTransportProtocol
-
icmpIpV4Layer
.
Length
)
};
else
{
...
...
@@ -159,19 +160,19 @@ namespace PcapDotNet.Packets.Test
switch
(
icmpLayer
.
MessageType
)
{
// case IcmpMessageType.DestinationUnreachable:
// case IcmpMessageType.TimeExceeded:
// case IcmpMessageType.DestinationUnreachable:
// case IcmpMessageType.TimeExceeded:
case
IcmpMessageType
.
ParameterProblem
:
((
IcmpParameterProblemLayer
)
icmpLayer
).
Pointer
%=
(
byte
)
icmpPayloadLength
;
break
;
// case IcmpMessageType.SourceQuench:
// case IcmpMessageType.Redirect:
// case IcmpMessageType.SourceQuench:
// case IcmpMessageType.Redirect:
case
IcmpMessageType
.
SecurityFailures
:
((
IcmpSecurityFailuresLayer
)
icmpLayer
).
Pointer
%=
(
ushort
)
icmpPayloadLength
;
// icmpIpV4Layer = random.NextIpV4Layer();
// icmpIpV4PayloadLayers = new[] {random.NextPayloadLayer(IcmpIpV4HeaderPlus64BitsPayloadDatagram.OriginalDatagramPayloadLength)};
// icmpIpV4Layer = random.NextIpV4Layer();
// icmpIpV4PayloadLayers = new[] {random.NextPayloadLayer(IcmpIpV4HeaderPlus64BitsPayloadDatagram.OriginalDatagramPayloadLength)};
break
;
// case IcmpMessageType.ConversionFailed:
// case IcmpMessageType.ConversionFailed:
}
PacketBuilder
packetBuilder
;
...
...
@@ -181,9 +182,25 @@ namespace PcapDotNet.Packets.Test
packetBuilder
=
new
PacketBuilder
(
ethernetLayer
,
ipV4Layer
,
icmpLayer
);
Packet
packet
=
packetBuilder
.
Build
(
DateTime
.
Now
);
Assert
.
IsTrue
(
packet
.
IsValid
,
"IsValid"
);
byte
[]
buffer
=
(
byte
[])
packet
.
Buffer
.
Clone
();
buffer
.
Write
(
ethernetLayer
.
Length
+
ipV4Layer
.
Length
,
random
.
NextDatagram
(
icmpLayer
.
Length
));
Packet
illegalPacket
=
new
Packet
(
buffer
,
DateTime
.
Now
,
packet
.
DataLink
);
Assert
.
IsFalse
(
illegalPacket
.
IsValid
,
"IsInvalid"
);
if
(
illegalPacket
.
Ethernet
.
IpV4
.
Icmp
is
IcmpUnknownDatagram
)
{
byte
[]
icmpBuffer
=
new
byte
[
illegalPacket
.
Ethernet
.
IpV4
.
Icmp
.
ExtractLayer
().
Length
];
ILayer
layer
=
illegalPacket
.
Ethernet
.
IpV4
.
Icmp
.
ExtractLayer
();
layer
.
Write
(
icmpBuffer
,
0
,
icmpBuffer
.
Length
,
null
,
null
);
layer
.
Finalize
(
icmpBuffer
,
0
,
icmpBuffer
.
Length
,
null
);
MoreAssert
.
AreSequenceEqual
(
illegalPacket
.
Ethernet
.
IpV4
.
Icmp
.
ToArray
(),
icmpBuffer
);
Assert
.
AreEqual
(
illegalPacket
,
new
PacketBuilder
(
ethernetLayer
,
ipV4Layer
,
illegalPacket
.
Ethernet
.
IpV4
.
Icmp
.
ExtractLayer
()).
Build
(
DateTime
.
Now
));
}
// Ethernet
ethernetLayer
.
EtherType
=
EthernetType
.
IpV4
;
Assert
.
AreEqual
(
ethernetLayer
,
packet
.
Ethernet
.
ExtractLayer
(),
"Ethernet Layer"
);
...
...
@@ -200,49 +217,53 @@ namespace PcapDotNet.Packets.Test
Assert
.
AreEqual
(
IpV4Datagram
.
DefaultVersion
,
packet
.
Ethernet
.
IpV4
.
Version
);
// ICMP
IcmpLayer
actualIcmpLayer
=
(
IcmpLayer
)
packet
.
Ethernet
.
IpV4
.
Icmp
.
ExtractLayer
();
IcmpDatagram
actualIcmp
=
packet
.
Ethernet
.
IpV4
.
Icmp
;
IcmpLayer
actualIcmpLayer
=
(
IcmpLayer
)
actualIcmp
.
ExtractLayer
();
icmpLayer
.
Checksum
=
actualIcmpLayer
.
Checksum
;
Assert
.
AreEqual
(
icmpLayer
,
actualIcmpLayer
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Icmp
.
IsChecksumCorrect
);
Assert
.
AreEqual
(
icmpLayer
.
MessageType
,
packet
.
Ethernet
.
IpV4
.
Icmp
.
MessageType
);
Assert
.
AreEqual
(
icmpLayer
.
CodeValue
,
packet
.
Ethernet
.
IpV4
.
Icmp
.
Code
);
// switch (packet.Ethernet.IpV4.Icmp.MessageType)
// {
// case IcmpMessageType.DestinationUnreachable:
//// Assert.AreEqual(icmpIpV4Layer, packet.Ethernet.IpV4.Icmp.DestinationUncreachable.IpV4.ExtractLayer());
//
// case IcmpMessageType.TimeExceeded:
// case IcmpMessageType.ParameterProblem:
// case IcmpMessageType.SourceQuench:
// case IcmpMessageType.Redirect:
// case IcmpMessageType.ConversionFailed:
// isIpV4Payload = true;
// break;
//
// case IcmpMessageType.Echo:
// case IcmpMessageType.EchoReply:
// case IcmpMessageType.Timestamp:
// case IcmpMessageType.TimestampReply:
// case IcmpMessageType.InformationRequest:
// case IcmpMessageType.InformationReply:
// case IcmpMessageType.RouterAdvertisement:
// case IcmpMessageType.RouterSolicitation:
//// packet.Ethernet.IpV4.Icmp.RouterSolicitation
// case IcmpMessageType.AddressMaskRequest:
// case IcmpMessageType.AddressMaskReply:
// case IcmpMessageType.Traceroute:
// case IcmpMessageType.DomainNameRequest:
// case IcmpMessageType.SecurityFailures:
// isIpV4Payload = false;
// break;
//
// case IcmpMessageType.DomainNameReply:
//
// default:
// throw new InvalidOperationException("Invalid icmpMessageType " + packet.Ethernet.IpV4.Icmp.MessageType);
//
// }
Assert
.
AreNotEqual
(
random
.
NextIcmpLayer
(),
actualIcmpLayer
);
Assert
.
IsTrue
(
actualIcmp
.
IsChecksumCorrect
);
Assert
.
AreEqual
(
icmpLayer
.
MessageType
,
actualIcmp
.
MessageType
);
Assert
.
AreEqual
(
icmpLayer
.
CodeValue
,
actualIcmp
.
Code
);
Assert
.
AreEqual
(
icmpLayer
.
MessageTypeAndCode
,
actualIcmp
.
MessageTypeAndCode
);
Assert
.
AreEqual
(
packet
.
Length
-
ethernetLayer
.
Length
-
ipV4Layer
.
Length
-
IcmpDatagram
.
HeaderLength
,
actualIcmp
.
Payload
.
Length
);
Assert
.
IsNotNull
(
icmpLayer
.
ToString
());
switch
(
packet
.
Ethernet
.
IpV4
.
Icmp
.
MessageType
)
{
case
IcmpMessageType
.
DestinationUnreachable
:
case
IcmpMessageType
.
RouterSolicitation
:
case
IcmpMessageType
.
SourceQuench
:
case
IcmpMessageType
.
TimeExceeded
:
Assert
.
AreEqual
<
uint
>(
0
,
actualIcmp
.
Variable
);
break
;
case
IcmpMessageType
.
ParameterProblem
:
case
IcmpMessageType
.
Redirect
:
case
IcmpMessageType
.
ConversionFailed
:
case
IcmpMessageType
.
Echo
:
case
IcmpMessageType
.
EchoReply
:
case
IcmpMessageType
.
Timestamp
:
case
IcmpMessageType
.
TimestampReply
:
case
IcmpMessageType
.
InformationRequest
:
case
IcmpMessageType
.
InformationReply
:
case
IcmpMessageType
.
RouterAdvertisement
:
case
IcmpMessageType
.
AddressMaskRequest
:
case
IcmpMessageType
.
AddressMaskReply
:
break
;
case
IcmpMessageType
.
Traceroute
:
Assert
.
AreEqual
(((
IcmpTracerouteLayer
)
icmpLayer
).
OutboundHopCount
==
0xFFFF
,
((
IcmpTracerouteDatagram
)
actualIcmp
).
IsOutbound
);
break
;
case
IcmpMessageType
.
DomainNameRequest
:
case
IcmpMessageType
.
SecurityFailures
:
break
;
break
;
case
IcmpMessageType
.
DomainNameReply
:
default
:
throw
new
InvalidOperationException
(
"Invalid icmpMessageType "
+
packet
.
Ethernet
.
IpV4
.
Icmp
.
MessageType
);
}
}
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpAddressMaskReplyDatagram.cs
View file @
2eef92c2
namespace
PcapDotNet.Packets.Icmp
{
/// <summary>
/// RFC 950.
/// <pre>
/// +-----+------+------+-----------------+
/// | Bit | 0-7 | 8-15 | 16-31 |
/// +-----+------+------+-----------------+
/// | 0 | Type | Code | Checksum |
/// +-----+------+------+-----------------+
/// | 32 | Identifier | Sequence Number |
/// +-----+-------------+-----------------+
/// | 64 | Address Mask |
/// +-----+-------------------------------+
/// </pre>
/// </summary>
public
class
IcmpAddressMaskReplyDatagram
:
IcmpAddressMaskRequestDatagram
{
internal
IcmpAddressMaskReplyDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpAddressMaskRequestLayer.cs
View file @
2eef92c2
...
...
@@ -11,11 +11,11 @@ namespace PcapDotNet.Packets.Icmp
get
{
return
IcmpMessageType
.
AddressMaskRequest
;
}
}
p
ublic
override
int
Length
p
rotected
override
int
Payload
Length
{
get
{
return
base
.
Length
+
IcmpAddressMaskRequestDatagram
.
PayloadLength
;
return
IcmpAddressMaskRequestDatagram
.
PayloadLength
;
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpDatagram.cs
View file @
2eef92c2
...
...
@@ -208,6 +208,8 @@ namespace PcapDotNet.Packets.Icmp
return
new
IcmpSecurityFailuresDatagram
(
buffer
,
offset
,
length
);
case
IcmpMessageType
.
RouterSolicitation
:
return
new
IcmpRouterSolicitationDatagram
(
buffer
,
offset
,
length
);
case
IcmpMessageType
.
DomainNameReply
:
// Domain Name Reply is unsupported
default
:
return
new
IcmpUnknownDatagram
(
buffer
,
offset
,
length
);
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpLayer.cs
View file @
2eef92c2
...
...
@@ -24,9 +24,14 @@ namespace PcapDotNet.Packets.Icmp
get
{
return
0
;
}
}
public
override
int
Length
public
override
sealed
int
Length
{
get
{
return
IcmpDatagram
.
HeaderLength
;
}
get
{
return
IcmpDatagram
.
HeaderLength
+
PayloadLength
;
}
}
protected
virtual
int
PayloadLength
{
get
{
return
0
;
}
}
protected
override
sealed
void
Write
(
byte
[]
buffer
,
int
offset
)
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpRouterAdvertisementDatagram.cs
View file @
2eef92c2
...
...
@@ -121,7 +121,7 @@ namespace PcapDotNet.Packets.Icmp
{
}
internal
static
int
Get
HeaderAdditional
Length
(
int
numEntries
)
internal
static
int
Get
Payload
Length
(
int
numEntries
)
{
return
numEntries
*
DefaultAddressEntrySize
*
IpV4Address
.
SizeOf
;
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpRouterAdvertisementLayer.cs
View file @
2eef92c2
...
...
@@ -24,11 +24,11 @@ namespace PcapDotNet.Packets.Icmp
}
}
p
ublic
override
int
Length
p
rotected
override
int
Payload
Length
{
get
{
return
base
.
Length
+
IcmpRouterAdvertisementDatagram
.
GetHeaderAdditional
Length
(
Entries
.
Count
);
return
IcmpRouterAdvertisementDatagram
.
GetPayload
Length
(
Entries
.
Count
);
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpRouterSolicitationDatagram.cs
0 → 100644
View file @
2eef92c2
namespace
PcapDotNet.Packets.Icmp
{
/// <summary>
/// RFC 1256.
/// <pre>
/// +-----+------+------+-----------+
/// | Bit | 0-7 | 8-15 | 16-31 |
/// +-----+------+------+-----------+
/// | 0 | Type | Code | Checksum |
/// +-----+------+------+-----------+
/// | 32 | reserved |
/// +-----+-------------------------+
/// </pre>
/// </summary>
public
class
IcmpRouterSolicitationDatagram
:
IcmpDatagram
{
internal
IcmpRouterSolicitationDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
:
base
(
buffer
,
offset
,
length
)
{
}
public
override
ILayer
ExtractLayer
()
{
return
new
IcmpRouterSolicitationLayer
();
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpSourceQuenchDatagram.cs
View file @
2eef92c2
using
System
;
namespace
PcapDotNet.Packets.Icmp
{
/// <summary>
...
...
@@ -30,6 +32,5 @@ namespace PcapDotNet.Packets.Icmp
Checksum
=
Checksum
};
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpTimestampLayer.cs
View file @
2eef92c2
...
...
@@ -12,11 +12,11 @@ namespace PcapDotNet.Packets.Icmp
get
{
return
IcmpMessageType
.
Timestamp
;
}
}
p
ublic
override
int
Length
p
rotected
override
int
Payload
Length
{
get
{
return
base
.
Length
+
IcmpTimestampDatagram
.
PayloadLength
;
return
IcmpTimestampDatagram
.
PayloadLength
;
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpTimestampReplyDatagram.cs
View file @
2eef92c2
namespace
PcapDotNet.Packets.Icmp
{
/// <summary>
/// RFC 792.
/// <pre>
/// +-----+------+------+-----------------+
/// | Bit | 0-7 | 8-15 | 16-31 |
/// +-----+------+------+-----------------+
/// | 0 | Type | Code | Checksum |
/// +-----+------+------+-----------------+
/// | 32 | Identifier | Sequence Number |
/// +-----+-------------+-----------------+
/// | 64 | Originate Timestamp |
/// +-----+-------------------------------+
/// | 96 | Receive Timestamp |
/// +-----+-------------------------------+
/// | 128 | Transmit Timestamp |
/// +-----+-------------------------------+
/// </pre>
/// </summary>
public
class
IcmpTimestampReplyDatagram
:
IcmpTimestampDatagram
{
internal
IcmpTimestampReplyDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpTracerouteLayer.cs
View file @
2eef92c2
...
...
@@ -21,11 +21,11 @@ namespace PcapDotNet.Packets.Icmp
get
{
return
IcmpMessageType
.
Traceroute
;
}
}
p
ublic
override
int
Length
p
rotected
override
int
Payload
Length
{
get
{
return
base
.
Length
+
IcmpTracerouteDatagram
.
PayloadLength
;
return
IcmpTracerouteDatagram
.
PayloadLength
;
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpUnknownDatagram.cs
View file @
2eef92c2
...
...
@@ -19,14 +19,9 @@ namespace PcapDotNet.Packets.Icmp
};
}
protected
override
b
yte
MinCodeValue
protected
override
b
ool
CalculateIsValid
()
{
get
{
return
byte
.
MinValue
;
}
}
protected
override
byte
MaxCodeValue
{
get
{
return
byte
.
MaxValue
;
}
return
false
;
}
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpUnknownLayer.cs
View file @
2eef92c2
...
...
@@ -15,6 +15,22 @@ namespace PcapDotNet.Packets.Icmp
}
}
public
override
byte
CodeValue
{
get
{
return
LayerCode
;
}
}
protected
override
int
PayloadLength
{
get
{
return
Payload
.
Length
;
}
}
protected
override
uint
Value
{
get
{
return
LayerValue
;
}
...
...
PcapDotNet/src/PcapDotNet.Packets/PcapDotNet.Packets.csproj
View file @
2eef92c2
...
...
@@ -99,6 +99,7 @@
<Compile
Include=
"Icmp\IcmpRedirectLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpRouterAdvertisementEntry.cs"
/>
<Compile
Include=
"Icmp\IcmpRouterAdvertisementLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpRouterSolicitationDatagram.cs"
/>
<Compile
Include=
"Icmp\IcmpRouterSolicitationLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpSecurityFailuresLayer.cs"
/>
<Compile
Include=
"Icmp\IcmpSourceQuenchDatagram.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