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
cd86ed94
Commit
cd86ed94
authored
Nov 28, 2009
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Packet Builder design
parent
87c607eb
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
148 additions
and
76 deletions
+148
-76
IcmpTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/IcmpTests.cs
+4
-0
IgmpTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/IgmpTests.cs
+1
-0
IpV4Tests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/IpV4Tests.cs
+1
-0
TcpTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/TcpTests.cs
+2
-0
UdpTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/UdpTests.cs
+31
-56
RandomPacketsExtensions.cs
...c/PcapDotNet.Packets.TestUtils/RandomPacketsExtensions.cs
+41
-4
IcmpDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpDatagram.cs
+30
-7
IpV4Datagram.cs
PcapDotNet/src/PcapDotNet.Packets/IpV4/IpV4Datagram.cs
+6
-3
PacketBuilder.cs
PcapDotNet/src/PcapDotNet.Packets/PacketBuilder.cs
+3
-3
PacketBuilder2.cs
PcapDotNet/src/PcapDotNet.Packets/PacketBuilder2.cs
+17
-3
TcpDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Transport/TcpDatagram.cs
+1
-0
UdpDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Transport/UdpDatagram.cs
+11
-0
No files found.
PcapDotNet/src/PcapDotNet.Packets.Test/IcmpTests.cs
View file @
cd86ed94
...
@@ -77,9 +77,12 @@ namespace PcapDotNet.Packets.Test
...
@@ -77,9 +77,12 @@ namespace PcapDotNet.Packets.Test
Random
random
=
new
Random
();
Random
random
=
new
Random
();
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
ipV4Layer
.
HeaderChecksum
=
null
;
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
{
{
IcmpLayer
icmpLayer
=
random
.
NextIcmpLayer
();
IcmpLayer
icmpLayer
=
random
.
NextIcmpLayer
();
icmpLayer
.
Checksum
=
null
;
bool
isIpV4Payload
;
bool
isIpV4Payload
;
switch
(
icmpLayer
.
MessageType
)
switch
(
icmpLayer
.
MessageType
)
...
@@ -148,6 +151,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -148,6 +151,7 @@ namespace PcapDotNet.Packets.Test
// ICMP
// ICMP
IcmpLayer
actualIcmpLayer
=
(
IcmpLayer
)
packet
.
Ethernet
.
IpV4
.
Icmp
.
ExtractLayer
();
IcmpLayer
actualIcmpLayer
=
(
IcmpLayer
)
packet
.
Ethernet
.
IpV4
.
Icmp
.
ExtractLayer
();
icmpLayer
.
Checksum
=
actualIcmpLayer
.
Checksum
;
Assert
.
AreEqual
(
icmpLayer
,
actualIcmpLayer
);
Assert
.
AreEqual
(
icmpLayer
,
actualIcmpLayer
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Icmp
.
IsChecksumCorrect
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Icmp
.
IsChecksumCorrect
);
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets.Test/IgmpTests.cs
View file @
cd86ed94
...
@@ -77,6 +77,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -77,6 +77,7 @@ namespace PcapDotNet.Packets.Test
Random
random
=
new
Random
();
Random
random
=
new
Random
();
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
ipV4Layer
.
HeaderChecksum
=
null
;
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
{
{
...
...
PcapDotNet/src/PcapDotNet.Packets.Test/IpV4Tests.cs
View file @
cd86ed94
...
@@ -116,6 +116,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -116,6 +116,7 @@ namespace PcapDotNet.Packets.Test
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
{
{
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
();
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
();
ipV4Layer
.
HeaderChecksum
=
null
;
PayloadLayer
payloadLayer
=
random
.
NextPayloadLayer
(
random
.
Next
(
0
,
50
*
1024
));
PayloadLayer
payloadLayer
=
random
.
NextPayloadLayer
(
random
.
Next
(
0
,
50
*
1024
));
...
...
PcapDotNet/src/PcapDotNet.Packets.Test/TcpTests.cs
View file @
cd86ed94
...
@@ -77,6 +77,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -77,6 +77,7 @@ namespace PcapDotNet.Packets.Test
Random
random
=
new
Random
();
Random
random
=
new
Random
();
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
ipV4Layer
.
HeaderChecksum
=
null
;
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
{
{
...
@@ -99,6 +100,7 @@ namespace PcapDotNet.Packets.Test
...
@@ -99,6 +100,7 @@ namespace PcapDotNet.Packets.Test
ipV4Layer
.
HeaderChecksum
=
null
;
ipV4Layer
.
HeaderChecksum
=
null
;
// TCP
// TCP
tcpLayer
.
Checksum
=
packet
.
Ethernet
.
IpV4
.
Tcp
.
Checksum
;
Assert
.
AreEqual
(
tcpLayer
,
packet
.
Ethernet
.
IpV4
.
Tcp
.
ExtractLayer
(),
"TCP Layer"
);
Assert
.
AreEqual
(
tcpLayer
,
packet
.
Ethernet
.
IpV4
.
Tcp
.
ExtractLayer
(),
"TCP Layer"
);
foreach
(
TcpOption
option
in
packet
.
Ethernet
.
IpV4
.
Tcp
.
Options
)
foreach
(
TcpOption
option
in
packet
.
Ethernet
.
IpV4
.
Tcp
.
Options
)
{
{
...
...
PcapDotNet/src/PcapDotNet.Packets.Test/UdpTests.cs
View file @
cd86ed94
...
@@ -64,71 +64,46 @@ namespace PcapDotNet.Packets.Test
...
@@ -64,71 +64,46 @@ namespace PcapDotNet.Packets.Test
[
TestMethod
]
[
TestMethod
]
public
void
RandomUdpTest
()
public
void
RandomUdpTest
()
{
{
MacAddress
ethernetSource
=
new
MacAddress
(
"00:01:02:03:04:05"
);
EthernetLayer
ethernetLayer
=
new
EthernetLayer
MacAddress
ethernetDestination
=
new
MacAddress
(
"A0:A1:A2:A3:A4:A5"
);
{
Source
=
new
MacAddress
(
"00:01:02:03:04:05"
),
Destination
=
new
MacAddress
(
"A0:A1:A2:A3:A4:A5"
)
};
Random
random
=
new
Random
();
Random
random
=
new
Random
();
byte
ipV4TypeOfService
=
random
.
NextByte
();
IpV4Layer
ipV4Layer
=
random
.
NextIpV4Layer
(
null
);
ushort
ipV4Identification
=
random
.
NextUShort
();
ipV4Layer
.
HeaderChecksum
=
null
;
byte
ipV4Ttl
=
random
.
NextByte
();
IpV4FragmentationOptions
ipV4FragmentationOptions
=
random
.
NextEnum
<
IpV4FragmentationOptions
>();
ushort
ipV4FragmentationOffset
=
(
ushort
)(
random
.
NextUShort
(
ushort
.
MaxValue
/
8
)
*
8
);
IpV4Fragmentation
ipV4Fragmentation
=
new
IpV4Fragmentation
(
ipV4FragmentationOptions
,
ipV4FragmentationOffset
);
IpV4Address
ipV4Source
=
new
IpV4Address
(
random
.
NextUInt
());
IpV4Address
ipV4Destination
=
new
IpV4Address
(
random
.
NextUInt
());
IpV4Options
ipV4Options
=
random
.
NextIpV4Options
();
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
for
(
int
i
=
0
;
i
!=
1000
;
++
i
)
{
{
ushort
udpSourcePort
=
random
.
NextUShort
();
UdpLayer
udpLayer
=
random
.
NextUdpLayer
();
ushort
udpDestinationPort
=
random
.
NextUShort
();
udpLayer
.
Checksum
=
null
;
bool
udpCalculateChecksum
=
random
.
NextBool
();
Datagram
udpPayload
=
random
.
NextDatagram
(
random
.
Next
(
60000
));
PayloadLayer
payloadLayer
=
random
.
NextPayloadLayer
(
random
.
Next
(
60000
));
Packet
packet
=
new
PacketBuilder2
(
new
EthernetLayer
Packet
packet
=
PacketBuilder2
.
Build
(
DateTime
.
Now
,
ethernetLayer
,
ipV4Layer
,
udpLayer
,
payloadLayer
);
{
Source
=
ethernetSource
,
Assert
.
IsTrue
(
packet
.
IsValid
,
"IsValid"
);
Destination
=
ethernetDestination
,
},
// Ethernet
new
IpV4Layer
ethernetLayer
.
EtherType
=
EthernetType
.
IpV4
;
{
Assert
.
AreEqual
(
ethernetLayer
,
packet
.
Ethernet
.
ExtractLayer
(),
"Ethernet Layer"
);
TypeOfService
=
ipV4TypeOfService
,
Identification
=
ipV4Identification
,
// IpV4
Fragmentation
=
ipV4Fragmentation
,
ipV4Layer
.
Protocol
=
IpV4Protocol
.
Udp
;
Ttl
=
ipV4Ttl
,
ipV4Layer
.
HeaderChecksum
=
((
IpV4Layer
)
packet
.
Ethernet
.
IpV4
.
ExtractLayer
()).
HeaderChecksum
;
Source
=
ipV4Source
,
Assert
.
AreEqual
(
ipV4Layer
,
packet
.
Ethernet
.
IpV4
.
ExtractLayer
(),
"IP Layer"
);
Destination
=
ipV4Destination
,
ipV4Layer
.
HeaderChecksum
=
null
;
Options
=
ipV4Options
,
},
new
UdpLayer
{
SourcePort
=
udpSourcePort
,
DestinationPort
=
udpDestinationPort
,
CalculateChecksum
=
udpCalculateChecksum
,
},
new
PayloadLayer
{
Data
=
udpPayload
})
.
Build
(
DateTime
.
Now
);
// Packet packet = PacketBuilder.EthernetIpV4Udp(DateTime.Now,
// ethernetSource, ethernetDestination,
// ipV4TypeOfService, ipV4Identification, ipV4Fragmentation, ipV4Ttl,
// ipV4Source, ipV4Destination, ipV4Options,
// udpSourcePort, udpDestinationPort, udpCalculateChecksum,
// udpPayload);
Assert
.
IsTrue
(
packet
.
IsValid
);
// UDP
// UDP
Assert
.
AreEqual
(
udpSourcePort
,
packet
.
Ethernet
.
IpV4
.
Udp
.
SourcePort
,
"Source Port"
)
;
udpLayer
.
Checksum
=
packet
.
Ethernet
.
IpV4
.
Udp
.
Checksum
;
Assert
.
AreEqual
(
udp
DestinationPort
,
packet
.
Ethernet
.
IpV4
.
Udp
.
DestinationPort
,
"Destination Port
"
);
Assert
.
AreEqual
(
udp
Layer
,
packet
.
Ethernet
.
IpV4
.
Udp
.
ExtractLayer
(),
"UDP Layer
"
);
Assert
.
AreEqual
(
UdpDatagram
.
HeaderLength
+
udpPayload
.
Length
,
packet
.
Ethernet
.
IpV4
.
Udp
.
TotalLength
,
"Total Length"
);
Assert
.
AreEqual
(
UdpDatagram
.
HeaderLength
+
payloadLayer
.
Length
,
packet
.
Ethernet
.
IpV4
.
Udp
.
TotalLength
,
"Total Length"
);
Assert
.
IsTrue
(!
udpCalculateChecksum
&&
packet
.
Ethernet
.
IpV4
.
Udp
.
Checksum
==
0
||
Assert
.
IsTrue
(!
udp
Layer
.
CalculateChecksum
&&
packet
.
Ethernet
.
IpV4
.
Udp
.
Checksum
==
0
||
packet
.
Ethernet
.
IpV4
.
IsTransportChecksumCorrect
,
"IsTransportChecksumCorrect"
);
udpLayer
.
CalculateChecksum
&&
packet
.
Ethernet
.
IpV4
.
IsTransportChecksumCorrect
,
"IsTransportChecksumCorrect"
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Udp
.
IsChecksumOptional
,
"IsChecksumOptional"
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Udp
.
IsChecksumOptional
,
"IsChecksumOptional"
);
Assert
.
AreEqual
(
udpPayload
,
packet
.
Ethernet
.
IpV4
.
Udp
.
Payload
,
"Payload"
);
Assert
.
AreEqual
(
payloadLayer
.
Data
,
packet
.
Ethernet
.
IpV4
.
Udp
.
Payload
,
"Payload"
);
}
}
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets.TestUtils/RandomPacketsExtensions.cs
View file @
cd86ed94
...
@@ -123,6 +123,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -123,6 +123,7 @@ namespace PcapDotNet.Packets.TestUtils
Identification
=
random
.
NextUShort
(),
Identification
=
random
.
NextUShort
(),
Ttl
=
random
.
NextByte
(),
Ttl
=
random
.
NextByte
(),
Protocol
=
protocol
,
Protocol
=
protocol
,
HeaderChecksum
=
random
.
NextUShort
(),
Fragmentation
=
random
.
NextIpV4Fragmentation
(),
Fragmentation
=
random
.
NextIpV4Fragmentation
(),
Source
=
random
.
NextIpV4Address
(),
Source
=
random
.
NextIpV4Address
(),
Destination
=
random
.
NextIpV4Address
(),
Destination
=
random
.
NextIpV4Address
(),
...
@@ -316,6 +317,19 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -316,6 +317,19 @@ namespace PcapDotNet.Packets.TestUtils
return
new
IpV4Options
(
options
);
return
new
IpV4Options
(
options
);
}
}
// UDP
public
static
UdpLayer
NextUdpLayer
(
this
Random
random
)
{
return
new
UdpLayer
{
Checksum
=
random
.
NextUShort
(),
SourcePort
=
random
.
NextUShort
(),
DestinationPort
=
random
.
NextUShort
(),
CalculateChecksum
=
random
.
NextBool
()
};
}
// TCP
// TCP
public
static
TcpLayer
NextTcpLayer
(
this
Random
random
)
public
static
TcpLayer
NextTcpLayer
(
this
Random
random
)
...
@@ -563,34 +577,42 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -563,34 +577,42 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
DestinationUnreachable
:
case
IcmpMessageType
.
DestinationUnreachable
:
return
new
IcmpDestinationUnreachableLayer
return
new
IcmpDestinationUnreachableLayer
{
{
Code
=
random
.
NextEnum
<
IcmpCodeDestinationUnrechable
>()
Code
=
random
.
NextEnum
<
IcmpCodeDestinationUnrechable
>(),
Checksum
=
random
.
NextUShort
(),
};
};
case
IcmpMessageType
.
TimeExceeded
:
case
IcmpMessageType
.
TimeExceeded
:
return
new
IcmpTimeExceededLayer
return
new
IcmpTimeExceededLayer
{
{
Code
=
random
.
NextEnum
<
IcmpCodeTimeExceeded
>()
Code
=
random
.
NextEnum
<
IcmpCodeTimeExceeded
>(),
Checksum
=
random
.
NextUShort
(),
};
};
case
IcmpMessageType
.
ParameterProblem
:
case
IcmpMessageType
.
ParameterProblem
:
return
new
IcmpParameterProblemLayer
return
new
IcmpParameterProblemLayer
{
{
Checksum
=
random
.
NextUShort
(),
Pointer
=
random
.
NextByte
()
Pointer
=
random
.
NextByte
()
};
};
case
IcmpMessageType
.
SourceQuench
:
case
IcmpMessageType
.
SourceQuench
:
return
new
IcmpSourceQuenchLayer
();
return
new
IcmpSourceQuenchLayer
{
Checksum
=
random
.
NextUShort
(),
};
case
IcmpMessageType
.
Redirect
:
case
IcmpMessageType
.
Redirect
:
return
new
IcmpRedirectLayer
return
new
IcmpRedirectLayer
{
{
Code
=
random
.
NextEnum
<
IcmpCodeRedirect
>(),
Code
=
random
.
NextEnum
<
IcmpCodeRedirect
>(),
Checksum
=
random
.
NextUShort
(),
GatewayInternetAddress
=
random
.
NextIpV4Address
()
GatewayInternetAddress
=
random
.
NextIpV4Address
()
};
};
case
IcmpMessageType
.
Echo
:
case
IcmpMessageType
.
Echo
:
return
new
IcmpEchoLayer
return
new
IcmpEchoLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
()
SequenceNumber
=
random
.
NextUShort
()
};
};
...
@@ -598,6 +620,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -598,6 +620,7 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
EchoReply
:
case
IcmpMessageType
.
EchoReply
:
return
new
IcmpEchoReplyLayer
return
new
IcmpEchoReplyLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
()
SequenceNumber
=
random
.
NextUShort
()
};
};
...
@@ -606,6 +629,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -606,6 +629,7 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
Timestamp
:
case
IcmpMessageType
.
Timestamp
:
return
new
IcmpTimestampLayer
return
new
IcmpTimestampLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
OriginateTimestamp
=
random
.
NextIpV4TimeOfDay
(),
OriginateTimestamp
=
random
.
NextIpV4TimeOfDay
(),
...
@@ -616,6 +640,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -616,6 +640,7 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
TimestampReply
:
case
IcmpMessageType
.
TimestampReply
:
return
new
IcmpTimestampReplyLayer
return
new
IcmpTimestampReplyLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
OriginateTimestamp
=
random
.
NextIpV4TimeOfDay
(),
OriginateTimestamp
=
random
.
NextIpV4TimeOfDay
(),
...
@@ -626,6 +651,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -626,6 +651,7 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
InformationRequest
:
case
IcmpMessageType
.
InformationRequest
:
return
new
IcmpInformationRequestLayer
return
new
IcmpInformationRequestLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
};
};
...
@@ -633,6 +659,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -633,6 +659,7 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
InformationReply
:
case
IcmpMessageType
.
InformationReply
:
return
new
IcmpInformationReplyLayer
return
new
IcmpInformationReplyLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
};
};
...
@@ -641,16 +668,21 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -641,16 +668,21 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
RouterAdvertisement
:
case
IcmpMessageType
.
RouterAdvertisement
:
return
new
IcmpRouterAdvertisementLayer
return
new
IcmpRouterAdvertisementLayer
{
{
Checksum
=
random
.
NextUShort
(),
Lifetime
=
random
.
NextTimeSpan
(
TimeSpan
.
Zero
,
TimeSpan
.
FromSeconds
(
ushort
.
MaxValue
)),
Lifetime
=
random
.
NextTimeSpan
(
TimeSpan
.
Zero
,
TimeSpan
.
FromSeconds
(
ushort
.
MaxValue
)),
Entries
=
random
.
NextIcmpRouterAdvertisementEntries
(
random
.
Next
(
10
)).
ToList
()
Entries
=
random
.
NextIcmpRouterAdvertisementEntries
(
random
.
Next
(
10
)).
ToList
()
};
};
case
IcmpMessageType
.
RouterSolicitation
:
case
IcmpMessageType
.
RouterSolicitation
:
return
new
IcmpRouterSolicitationLayer
();
return
new
IcmpRouterSolicitationLayer
{
Checksum
=
random
.
NextUShort
(),
};
case
IcmpMessageType
.
AddressMaskRequest
:
case
IcmpMessageType
.
AddressMaskRequest
:
return
new
IcmpAddressMaskRequestLayer
return
new
IcmpAddressMaskRequestLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
AddressMask
=
random
.
NextIpV4Address
()
AddressMask
=
random
.
NextIpV4Address
()
...
@@ -659,6 +691,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -659,6 +691,7 @@ namespace PcapDotNet.Packets.TestUtils
case
IcmpMessageType
.
AddressMaskReply
:
case
IcmpMessageType
.
AddressMaskReply
:
return
new
IcmpAddressMaskReplyLayer
return
new
IcmpAddressMaskReplyLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
AddressMask
=
random
.
NextIpV4Address
()
AddressMask
=
random
.
NextIpV4Address
()
...
@@ -668,6 +701,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -668,6 +701,7 @@ namespace PcapDotNet.Packets.TestUtils
return
new
IcmpTracerouteLayer
return
new
IcmpTracerouteLayer
{
{
Code
=
random
.
NextEnum
<
IcmpCodeTraceroute
>(),
Code
=
random
.
NextEnum
<
IcmpCodeTraceroute
>(),
Checksum
=
random
.
NextUShort
(),
Identification
=
random
.
NextUShort
(),
Identification
=
random
.
NextUShort
(),
OutboundHopCount
=
random
.
NextUShort
(),
OutboundHopCount
=
random
.
NextUShort
(),
ReturnHopCount
=
random
.
NextUShort
(),
ReturnHopCount
=
random
.
NextUShort
(),
...
@@ -679,12 +713,14 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -679,12 +713,14 @@ namespace PcapDotNet.Packets.TestUtils
return
new
IcmpConversionFailedLayer
return
new
IcmpConversionFailedLayer
{
{
Code
=
random
.
NextEnum
<
IcmpCodeConversionFailed
>(),
Code
=
random
.
NextEnum
<
IcmpCodeConversionFailed
>(),
Checksum
=
random
.
NextUShort
(),
Pointer
=
random
.
NextUInt
(),
Pointer
=
random
.
NextUInt
(),
};
};
case
IcmpMessageType
.
DomainNameRequest
:
case
IcmpMessageType
.
DomainNameRequest
:
return
new
IcmpDomainNameRequestLayer
return
new
IcmpDomainNameRequestLayer
{
{
Checksum
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
Identifier
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
SequenceNumber
=
random
.
NextUShort
(),
};
};
...
@@ -696,6 +732,7 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -696,6 +732,7 @@ namespace PcapDotNet.Packets.TestUtils
return
new
IcmpSecurityFailuresLayer
return
new
IcmpSecurityFailuresLayer
{
{
Code
=
random
.
NextEnum
<
IcmpCodeSecurityFailures
>(),
Code
=
random
.
NextEnum
<
IcmpCodeSecurityFailures
>(),
Checksum
=
random
.
NextUShort
(),
Pointer
=
random
.
NextUShort
()
Pointer
=
random
.
NextUShort
()
};
};
...
...
PcapDotNet/src/PcapDotNet.Packets/Icmp/IcmpDatagram.cs
View file @
cd86ed94
...
@@ -83,34 +83,42 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -83,34 +83,42 @@ namespace PcapDotNet.Packets.Icmp
case
IcmpMessageType
.
DestinationUnreachable
:
case
IcmpMessageType
.
DestinationUnreachable
:
return
new
IcmpDestinationUnreachableLayer
return
new
IcmpDestinationUnreachableLayer
{
{
Code
=
(
IcmpCodeDestinationUnrechable
)
Code
Code
=
(
IcmpCodeDestinationUnrechable
)
Code
,
Checksum
=
Checksum
};
};
case
IcmpMessageType
.
TimeExceeded
:
case
IcmpMessageType
.
TimeExceeded
:
return
new
IcmpTimeExceededLayer
return
new
IcmpTimeExceededLayer
{
{
Code
=
(
IcmpCodeTimeExceeded
)
Code
Code
=
(
IcmpCodeTimeExceeded
)
Code
,
Checksum
=
Checksum
};
};
case
IcmpMessageType
.
ParameterProblem
:
case
IcmpMessageType
.
ParameterProblem
:
return
new
IcmpParameterProblemLayer
return
new
IcmpParameterProblemLayer
{
{
Checksum
=
Checksum
,
Pointer
=
ParameterProblem
.
Pointer
Pointer
=
ParameterProblem
.
Pointer
};
};
case
IcmpMessageType
.
SourceQuench
:
case
IcmpMessageType
.
SourceQuench
:
return
new
IcmpSourceQuenchLayer
();
return
new
IcmpSourceQuenchLayer
{
Checksum
=
Checksum
};
case
IcmpMessageType
.
Redirect
:
case
IcmpMessageType
.
Redirect
:
return
new
IcmpRedirectLayer
return
new
IcmpRedirectLayer
{
{
Code
=
(
IcmpCodeRedirect
)
Code
,
Code
=
(
IcmpCodeRedirect
)
Code
,
Checksum
=
Checksum
,
GatewayInternetAddress
=
Redirect
.
GatewayInternetAddress
GatewayInternetAddress
=
Redirect
.
GatewayInternetAddress
};
};
case
IcmpMessageType
.
Echo
:
case
IcmpMessageType
.
Echo
:
return
new
IcmpEchoLayer
return
new
IcmpEchoLayer
{
{
Checksum
=
Checksum
,
Identifier
=
Echo
.
Identifier
,
Identifier
=
Echo
.
Identifier
,
SequenceNumber
=
Echo
.
SequenceNumber
SequenceNumber
=
Echo
.
SequenceNumber
};
};
...
@@ -126,6 +134,7 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -126,6 +134,7 @@ namespace PcapDotNet.Packets.Icmp
case
IcmpMessageType
.
Timestamp
:
case
IcmpMessageType
.
Timestamp
:
return
new
IcmpTimestampLayer
return
new
IcmpTimestampLayer
{
{
Checksum
=
Checksum
,
Identifier
=
Timestamp
.
Identifier
,
Identifier
=
Timestamp
.
Identifier
,
SequenceNumber
=
Timestamp
.
SequenceNumber
,
SequenceNumber
=
Timestamp
.
SequenceNumber
,
OriginateTimestamp
=
Timestamp
.
OriginateTimestamp
,
OriginateTimestamp
=
Timestamp
.
OriginateTimestamp
,
...
@@ -136,6 +145,7 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -136,6 +145,7 @@ namespace PcapDotNet.Packets.Icmp
case
IcmpMessageType
.
TimestampReply
:
case
IcmpMessageType
.
TimestampReply
:
return
new
IcmpTimestampReplyLayer
return
new
IcmpTimestampReplyLayer
{
{
Checksum
=
Checksum
,
Identifier
=
TimestampReply
.
Identifier
,
Identifier
=
TimestampReply
.
Identifier
,
SequenceNumber
=
TimestampReply
.
SequenceNumber
,
SequenceNumber
=
TimestampReply
.
SequenceNumber
,
OriginateTimestamp
=
TimestampReply
.
OriginateTimestamp
,
OriginateTimestamp
=
TimestampReply
.
OriginateTimestamp
,
...
@@ -146,6 +156,7 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -146,6 +156,7 @@ namespace PcapDotNet.Packets.Icmp
case
IcmpMessageType
.
InformationRequest
:
case
IcmpMessageType
.
InformationRequest
:
return
new
IcmpInformationRequestLayer
return
new
IcmpInformationRequestLayer
{
{
Checksum
=
Checksum
,
Identifier
=
InformationRequest
.
Identifier
,
Identifier
=
InformationRequest
.
Identifier
,
SequenceNumber
=
InformationRequest
.
SequenceNumber
SequenceNumber
=
InformationRequest
.
SequenceNumber
};
};
...
@@ -161,16 +172,21 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -161,16 +172,21 @@ namespace PcapDotNet.Packets.Icmp
case
IcmpMessageType
.
RouterAdvertisement
:
case
IcmpMessageType
.
RouterAdvertisement
:
return
new
IcmpRouterAdvertisementLayer
return
new
IcmpRouterAdvertisementLayer
{
{
Checksum
=
Checksum
,
Lifetime
=
RouterAdvertisement
.
Lifetime
,
Lifetime
=
RouterAdvertisement
.
Lifetime
,
Entries
=
RouterAdvertisement
.
Entries
.
ToList
()
Entries
=
RouterAdvertisement
.
Entries
.
ToList
()
};
};
case
IcmpMessageType
.
RouterSolicitation
:
case
IcmpMessageType
.
RouterSolicitation
:
return
new
IcmpRouterSolicitationLayer
();
return
new
IcmpRouterSolicitationLayer
{
Checksum
=
Checksum
,
};
case
IcmpMessageType
.
AddressMaskRequest
:
case
IcmpMessageType
.
AddressMaskRequest
:
return
new
IcmpAddressMaskRequestLayer
return
new
IcmpAddressMaskRequestLayer
{
{
Checksum
=
Checksum
,
Identifier
=
AddressMaskRequest
.
Identifier
,
Identifier
=
AddressMaskRequest
.
Identifier
,
SequenceNumber
=
AddressMaskRequest
.
SequenceNumber
,
SequenceNumber
=
AddressMaskRequest
.
SequenceNumber
,
AddressMask
=
AddressMaskRequest
.
AddressMask
AddressMask
=
AddressMaskRequest
.
AddressMask
...
@@ -179,6 +195,7 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -179,6 +195,7 @@ namespace PcapDotNet.Packets.Icmp
case
IcmpMessageType
.
AddressMaskReply
:
case
IcmpMessageType
.
AddressMaskReply
:
return
new
IcmpAddressMaskReplyLayer
return
new
IcmpAddressMaskReplyLayer
{
{
Checksum
=
Checksum
,
Identifier
=
AddressMaskReply
.
Identifier
,
Identifier
=
AddressMaskReply
.
Identifier
,
SequenceNumber
=
AddressMaskReply
.
SequenceNumber
,
SequenceNumber
=
AddressMaskReply
.
SequenceNumber
,
AddressMask
=
AddressMaskReply
.
AddressMask
AddressMask
=
AddressMaskReply
.
AddressMask
...
@@ -188,6 +205,7 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -188,6 +205,7 @@ namespace PcapDotNet.Packets.Icmp
return
new
IcmpTracerouteLayer
return
new
IcmpTracerouteLayer
{
{
Code
=
(
IcmpCodeTraceroute
)
Code
,
Code
=
(
IcmpCodeTraceroute
)
Code
,
Checksum
=
Checksum
,
Identification
=
Traceroute
.
Identification
,
Identification
=
Traceroute
.
Identification
,
OutboundHopCount
=
Traceroute
.
OutboundHopCount
,
OutboundHopCount
=
Traceroute
.
OutboundHopCount
,
ReturnHopCount
=
Traceroute
.
ReturnHopCount
,
ReturnHopCount
=
Traceroute
.
ReturnHopCount
,
...
@@ -199,12 +217,14 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -199,12 +217,14 @@ namespace PcapDotNet.Packets.Icmp
return
new
IcmpConversionFailedLayer
return
new
IcmpConversionFailedLayer
{
{
Code
=
(
IcmpCodeConversionFailed
)
Code
,
Code
=
(
IcmpCodeConversionFailed
)
Code
,
Checksum
=
Checksum
,
Pointer
=
ConversionFailed
.
Pointer
Pointer
=
ConversionFailed
.
Pointer
};
};
case
IcmpMessageType
.
DomainNameRequest
:
case
IcmpMessageType
.
DomainNameRequest
:
return
new
IcmpDomainNameRequestLayer
return
new
IcmpDomainNameRequestLayer
{
{
Checksum
=
Checksum
,
Identifier
=
DomainNameRequest
.
Identifier
,
Identifier
=
DomainNameRequest
.
Identifier
,
SequenceNumber
=
DomainNameRequest
.
SequenceNumber
SequenceNumber
=
DomainNameRequest
.
SequenceNumber
};
};
...
@@ -216,6 +236,7 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -216,6 +236,7 @@ namespace PcapDotNet.Packets.Icmp
return
new
IcmpSecurityFailuresLayer
return
new
IcmpSecurityFailuresLayer
{
{
Code
=
(
IcmpCodeSecurityFailures
)
Code
,
Code
=
(
IcmpCodeSecurityFailures
)
Code
,
Checksum
=
Checksum
,
Pointer
=
SecurityFailures
.
Pointer
Pointer
=
SecurityFailures
.
Pointer
};
};
...
@@ -383,10 +404,12 @@ namespace PcapDotNet.Packets.Icmp
...
@@ -383,10 +404,12 @@ namespace PcapDotNet.Packets.Icmp
buffer
.
Write
(
offset
+
Offset
.
Variable
,
valueAccordingToType
,
Endianity
.
Big
);
buffer
.
Write
(
offset
+
Offset
.
Variable
,
valueAccordingToType
,
Endianity
.
Big
);
}
}
internal
static
void
WriteChecksum
(
byte
[]
buffer
,
int
offset
,
int
length
)
internal
static
void
WriteChecksum
(
byte
[]
buffer
,
int
offset
,
int
length
,
ushort
?
checksum
)
{
{
ushort
checksum
=
CalculateChecksum
(
buffer
,
offset
,
length
);
ushort
checksumValue
=
checksum
==
null
buffer
.
Write
(
offset
+
Offset
.
Checksum
,
checksum
,
Endianity
.
Big
);
?
CalculateChecksum
(
buffer
,
offset
,
length
)
:
checksum
.
Value
;
buffer
.
Write
(
offset
+
Offset
.
Checksum
,
checksumValue
,
Endianity
.
Big
);
}
}
protected
override
bool
CalculateIsValid
()
protected
override
bool
CalculateIsValid
()
...
...
PcapDotNet/src/PcapDotNet.Packets/IpV4/IpV4Datagram.cs
View file @
cd86ed94
...
@@ -338,10 +338,13 @@ namespace PcapDotNet.Packets.IpV4
...
@@ -338,10 +338,13 @@ namespace PcapDotNet.Packets.IpV4
buffer
.
Write
(
offset
+
Offset
.
HeaderChecksum
,
headerChecksumValue
,
Endianity
.
Big
);
buffer
.
Write
(
offset
+
Offset
.
HeaderChecksum
,
headerChecksumValue
,
Endianity
.
Big
);
}
}
internal
static
void
WriteTransportChecksum
(
byte
[]
buffer
,
int
offset
,
int
headerLength
,
ushort
transportLength
,
int
transportChecksumOffset
,
bool
isChecksumOptional
)
internal
static
void
WriteTransportChecksum
(
byte
[]
buffer
,
int
offset
,
int
headerLength
,
ushort
transportLength
,
int
transportChecksumOffset
,
bool
isChecksumOptional
,
ushort
?
checksum
)
{
{
ushort
checksum
=
CalculateTransportChecksum
(
buffer
,
offset
,
headerLength
,
transportLength
,
transportChecksumOffset
,
isChecksumOptional
);
ushort
checksumValue
=
buffer
.
Write
(
offset
+
headerLength
+
transportChecksumOffset
,
checksum
,
Endianity
.
Big
);
checksum
==
null
?
CalculateTransportChecksum
(
buffer
,
offset
,
headerLength
,
transportLength
,
transportChecksumOffset
,
isChecksumOptional
)
:
checksum
.
Value
;
buffer
.
Write
(
offset
+
headerLength
+
transportChecksumOffset
,
checksumValue
,
Endianity
.
Big
);
}
}
private
ushort
CalculateTransportChecksum
()
private
ushort
CalculateTransportChecksum
()
...
...
PcapDotNet/src/PcapDotNet.Packets/PacketBuilder.cs
View file @
cd86ed94
...
@@ -255,7 +255,7 @@ namespace PcapDotNet.Packets
...
@@ -255,7 +255,7 @@ namespace PcapDotNet.Packets
icmpIpV4SourceAddress
,
icmpIpV4DestinationAddress
,
icmpIpV4SourceAddress
,
icmpIpV4DestinationAddress
,
icmpIpV4Options
,
icmpIpV4Payload
.
Length
);
icmpIpV4Options
,
icmpIpV4Payload
.
Length
);
icmpIpV4Payload
.
Write
(
buffer
,
icmpOffset
+
IcmpDatagram
.
HeaderLength
+
icmpIpHeaderLength
);
icmpIpV4Payload
.
Write
(
buffer
,
icmpOffset
+
IcmpDatagram
.
HeaderLength
+
icmpIpHeaderLength
);
IcmpDatagram
.
WriteChecksum
(
buffer
,
icmpOffset
,
ipPayloadLength
);
IcmpDatagram
.
WriteChecksum
(
buffer
,
icmpOffset
,
ipPayloadLength
,
null
);
return
new
Packet
(
buffer
,
timestamp
,
DataLinkKind
.
Ethernet
);
return
new
Packet
(
buffer
,
timestamp
,
DataLinkKind
.
Ethernet
);
}
}
...
@@ -610,7 +610,7 @@ namespace PcapDotNet.Packets
...
@@ -610,7 +610,7 @@ namespace PcapDotNet.Packets
udpPayload
.
Write
(
buffer
,
ethernetIpV4HeadersLength
+
UdpDatagram
.
HeaderLength
);
udpPayload
.
Write
(
buffer
,
ethernetIpV4HeadersLength
+
UdpDatagram
.
HeaderLength
);
if
(
udpCalculateChecksum
)
if
(
udpCalculateChecksum
)
IpV4Datagram
.
WriteTransportChecksum
(
buffer
,
EthernetDatagram
.
HeaderLength
,
ipV4HeaderLength
,
(
ushort
)
transportLength
,
UdpDatagram
.
Offset
.
Checksum
,
true
);
IpV4Datagram
.
WriteTransportChecksum
(
buffer
,
EthernetDatagram
.
HeaderLength
,
ipV4HeaderLength
,
(
ushort
)
transportLength
,
UdpDatagram
.
Offset
.
Checksum
,
true
,
null
);
return
new
Packet
(
buffer
,
timestamp
,
DataLinkKind
.
Ethernet
);
return
new
Packet
(
buffer
,
timestamp
,
DataLinkKind
.
Ethernet
);
}
}
...
@@ -674,7 +674,7 @@ namespace PcapDotNet.Packets
...
@@ -674,7 +674,7 @@ namespace PcapDotNet.Packets
tcpPayload
.
Write
(
buffer
,
ethernetIpV4HeadersLength
+
tcpHeaderLength
);
tcpPayload
.
Write
(
buffer
,
ethernetIpV4HeadersLength
+
tcpHeaderLength
);
IpV4Datagram
.
WriteTransportChecksum
(
buffer
,
EthernetDatagram
.
HeaderLength
,
ipV4HeaderLength
,
(
ushort
)
transportLength
,
IpV4Datagram
.
WriteTransportChecksum
(
buffer
,
EthernetDatagram
.
HeaderLength
,
ipV4HeaderLength
,
(
ushort
)
transportLength
,
TcpDatagram
.
Offset
.
Checksum
,
false
);
TcpDatagram
.
Offset
.
Checksum
,
false
,
null
);
return
new
Packet
(
buffer
,
timestamp
,
DataLinkKind
.
Ethernet
);
return
new
Packet
(
buffer
,
timestamp
,
DataLinkKind
.
Ethernet
);
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/PacketBuilder2.cs
View file @
cd86ed94
...
@@ -32,6 +32,8 @@ namespace PcapDotNet.Packets
...
@@ -32,6 +32,8 @@ namespace PcapDotNet.Packets
public
interface
IIpV4NextTransportLayer
:
IIpV4NextLayer
public
interface
IIpV4NextTransportLayer
:
IIpV4NextLayer
{
{
ushort
?
Checksum
{
get
;
set
;
}
bool
CalculateChecksum
{
get
;
}
int
NextLayerChecksumOffset
{
get
;
}
int
NextLayerChecksumOffset
{
get
;
}
bool
NextLayerIsChecksumOptional
{
get
;
}
bool
NextLayerIsChecksumOptional
{
get
;
}
bool
NextLayerCalculateChecksum
{
get
;
}
bool
NextLayerCalculateChecksum
{
get
;
}
...
@@ -252,8 +254,10 @@ namespace PcapDotNet.Packets
...
@@ -252,8 +254,10 @@ namespace PcapDotNet.Packets
if
(
nextTransportLayer
==
null
||
!
nextTransportLayer
.
NextLayerCalculateChecksum
)
if
(
nextTransportLayer
==
null
||
!
nextTransportLayer
.
NextLayerCalculateChecksum
)
return
;
return
;
IpV4Datagram
.
WriteTransportChecksum
(
buffer
,
offset
,
Length
,
(
ushort
)
payloadLength
,
if
(
nextTransportLayer
.
CalculateChecksum
)
nextTransportLayer
.
NextLayerChecksumOffset
,
nextTransportLayer
.
NextLayerIsChecksumOptional
);
IpV4Datagram
.
WriteTransportChecksum
(
buffer
,
offset
,
Length
,
(
ushort
)
payloadLength
,
nextTransportLayer
.
NextLayerChecksumOffset
,
nextTransportLayer
.
NextLayerIsChecksumOptional
,
nextTransportLayer
.
Checksum
);
}
}
public
bool
Equals
(
IpV4Layer
other
)
public
bool
Equals
(
IpV4Layer
other
)
...
@@ -280,11 +284,18 @@ namespace PcapDotNet.Packets
...
@@ -280,11 +284,18 @@ namespace PcapDotNet.Packets
public
abstract
class
TransportLayer
:
Layer
,
IIpV4NextTransportLayer
public
abstract
class
TransportLayer
:
Layer
,
IIpV4NextTransportLayer
{
{
public
ushort
?
Checksum
{
get
;
set
;
}
public
ushort
SourcePort
{
get
;
set
;
}
public
ushort
SourcePort
{
get
;
set
;
}
public
ushort
DestinationPort
{
get
;
set
;
}
public
ushort
DestinationPort
{
get
;
set
;
}
public
abstract
IpV4Protocol
PreviousLayerProtocol
{
get
;
}
public
abstract
IpV4Protocol
PreviousLayerProtocol
{
get
;
}
public
bool
CalculateChecksum
{
get
{
return
true
;
}
}
public
abstract
int
NextLayerChecksumOffset
{
get
;
}
public
abstract
int
NextLayerChecksumOffset
{
get
;
}
public
abstract
bool
NextLayerIsChecksumOptional
{
get
;
}
public
abstract
bool
NextLayerIsChecksumOptional
{
get
;
}
public
abstract
bool
NextLayerCalculateChecksum
{
get
;
}
public
abstract
bool
NextLayerCalculateChecksum
{
get
;
}
...
@@ -293,6 +304,7 @@ namespace PcapDotNet.Packets
...
@@ -293,6 +304,7 @@ namespace PcapDotNet.Packets
{
{
return
other
!=
null
&&
return
other
!=
null
&&
PreviousLayerProtocol
==
other
.
PreviousLayerProtocol
&&
PreviousLayerProtocol
==
other
.
PreviousLayerProtocol
&&
Checksum
==
other
.
Checksum
&&
SourcePort
==
other
.
SourcePort
&&
DestinationPort
==
other
.
DestinationPort
;
SourcePort
==
other
.
SourcePort
&&
DestinationPort
==
other
.
DestinationPort
;
}
}
...
@@ -703,6 +715,7 @@ namespace PcapDotNet.Packets
...
@@ -703,6 +715,7 @@ namespace PcapDotNet.Packets
{
{
get
{
return
0
;
}
get
{
return
0
;
}
}
}
public
ushort
?
Checksum
{
get
;
set
;
}
protected
virtual
uint
Value
protected
virtual
uint
Value
{
{
get
{
return
0
;
}
get
{
return
0
;
}
...
@@ -725,7 +738,7 @@ namespace PcapDotNet.Packets
...
@@ -725,7 +738,7 @@ namespace PcapDotNet.Packets
public
override
void
Finalize
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
nextLayer
)
public
override
void
Finalize
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
nextLayer
)
{
{
IcmpDatagram
.
WriteChecksum
(
buffer
,
offset
,
Length
+
payloadLength
);
IcmpDatagram
.
WriteChecksum
(
buffer
,
offset
,
Length
+
payloadLength
,
Checksum
);
}
}
public
IpV4Protocol
PreviousLayerProtocol
public
IpV4Protocol
PreviousLayerProtocol
...
@@ -737,6 +750,7 @@ namespace PcapDotNet.Packets
...
@@ -737,6 +750,7 @@ namespace PcapDotNet.Packets
{
{
return
other
!=
null
&&
return
other
!=
null
&&
MessageType
==
other
.
MessageType
&&
CodeValue
==
other
.
CodeValue
&&
MessageType
==
other
.
MessageType
&&
CodeValue
==
other
.
CodeValue
&&
Checksum
==
other
.
Checksum
&&
Value
==
other
.
Value
;
Value
==
other
.
Value
;
}
}
...
...
PcapDotNet/src/PcapDotNet.Packets/Transport/TcpDatagram.cs
View file @
cd86ed94
...
@@ -242,6 +242,7 @@ namespace PcapDotNet.Packets.Transport
...
@@ -242,6 +242,7 @@ namespace PcapDotNet.Packets.Transport
{
{
return
new
TcpLayer
return
new
TcpLayer
{
{
Checksum
=
Checksum
,
SourcePort
=
SourcePort
,
SourcePort
=
SourcePort
,
DestinationPort
=
DestinationPort
,
DestinationPort
=
DestinationPort
,
SequenceNumber
=
SequenceNumber
,
SequenceNumber
=
SequenceNumber
,
...
...
PcapDotNet/src/PcapDotNet.Packets/Transport/UdpDatagram.cs
View file @
cd86ed94
...
@@ -72,6 +72,17 @@ namespace PcapDotNet.Packets.Transport
...
@@ -72,6 +72,17 @@ namespace PcapDotNet.Packets.Transport
get
{
return
true
;
}
get
{
return
true
;
}
}
}
public
override
ILayer
ExtractLayer
()
{
return
new
UdpLayer
{
Checksum
=
Checksum
,
SourcePort
=
SourcePort
,
DestinationPort
=
DestinationPort
,
CalculateChecksum
=
(
Checksum
!=
0
)
};
}
/// <summary>
/// <summary>
/// The payload of the UDP datagram.
/// The payload of the UDP datagram.
/// </summary>
/// </summary>
...
...
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