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
57a21ac5
Commit
57a21ac5
authored
Jan 27, 2017
by
Boaz Brickner
Committed by
GitHub
Jan 27, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #85 from FlorianHockmann/master
Add validity checks for HTTP datagrams
parents
0cd9a9c3
e9071e50
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
117 additions
and
0 deletions
+117
-0
HttpTests.cs
PcapDotNet/src/PcapDotNet.Packets.Test/HttpTests.cs
+81
-0
HttpDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Http/HttpDatagram.cs
+20
-0
HttpRequestDatagram.cs
...DotNet/src/PcapDotNet.Packets/Http/HttpRequestDatagram.cs
+8
-0
HttpResponseDatagram.cs
...otNet/src/PcapDotNet.Packets/Http/HttpResponseDatagram.cs
+8
-0
No files found.
PcapDotNet/src/PcapDotNet.Packets.Test/HttpTests.cs
View file @
57a21ac5
...
...
@@ -108,6 +108,7 @@ namespace PcapDotNet.Packets.Test
if
(
httpLayer
.
Header
!=
null
)
{
Assert
.
AreEqual
(
httpLayer
.
Header
.
GetHashCode
(),
httpDatagram
.
Header
.
GetHashCode
());
Assert
.
IsTrue
(
httpDatagram
.
IsValidStart
,
"IsValidStart"
);
foreach
(
var
field
in
httpLayer
.
Header
)
Assert
.
IsFalse
(
field
.
Equals
(
"abc"
));
...
...
@@ -470,6 +471,86 @@ namespace PcapDotNet.Packets.Test
Assert
.
IsNotNull
(
new
HttpRequestMethod
(
HttpRequestKnownMethod
.
Unknown
));
}
[
TestMethod
]
public
void
HttpIsValidStartRequestValidTest
()
{
var
packet
=
BuildPacket
(
"UnknownMethod / HTTP/1.0\r\n\r\n"
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartRequestWithMissingUriNotAllowedTest
()
{
var
packet
=
BuildPacket
(
"GET HTTP/1.1\r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartRequestWithMissingVersionNumberNotAllowedTest
()
{
var
packet
=
BuildPacket
(
"GET / HTTP/\r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartRequestWithMissingVersionNotAllowedTest
()
{
var
packet
=
BuildPacket
(
"GET /\r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartRequestWithMissingMethodNotAllowedTest
()
{
var
packet
=
BuildPacket
(
" / HTTP/1.0\r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartResponseValidTest
()
{
var
packet
=
BuildPacket
(
"HTTP/1.0 200 OK\r\n\r\n"
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartResponseMinimalValidTest
()
{
var
packet
=
BuildPacket
(
"HTTP/1.0 200 \r\n\r\n"
);
Assert
.
IsTrue
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartResponseWithMissingVersionNumberNotAllowedTest
()
{
var
packet
=
BuildPacket
(
"HTTP/ 200 OK\r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartResponseWithMissingVersionNotAllowed
()
{
var
packet
=
BuildPacket
(
" 200 OK\r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
[
TestMethod
]
public
void
HttpIsValidStartResponseWithMissingStatusCodeNotAllowedTest
()
{
var
packet
=
BuildPacket
(
"HTTP/1.0 OK \r\n\r\n"
);
Assert
.
IsFalse
(
packet
.
Ethernet
.
IpV4
.
Tcp
.
Http
.
IsValidStart
);
}
private
static
void
TestHttpRequest
(
string
httpString
,
string
expectedMethodString
=
null
,
string
expectedUri
=
null
,
HttpVersion
expectedVersion
=
null
,
HttpHeader
expectedHeader
=
null
,
string
expectedBodyString
=
null
)
{
Datagram
expectedBody
=
expectedBodyString
==
null
?
null
:
new
Datagram
(
Encoding
.
ASCII
.
GetBytes
(
expectedBodyString
));
...
...
PcapDotNet/src/PcapDotNet.Packets/Http/HttpDatagram.cs
View file @
57a21ac5
...
...
@@ -239,6 +239,24 @@ namespace PcapDotNet.Packets.Http
/// </summary>
public
Datagram
Body
{
get
;
private
set
;
}
/// <summary>
/// True if this datagram contains a valid start for an HTTP message.
/// </summary>
public
bool
IsValidStart
{
get
{
if
(
_isValidStart
==
null
)
_isValidStart
=
CalculateIsValidStart
();
return
_isValidStart
.
Value
;
}
}
/// <summary>
/// Calculate whether the HTTP datagram has a valid start.
/// </summary>
protected
abstract
bool
CalculateIsValidStart
();
internal
static
HttpDatagram
CreateDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
{
if
(
length
>=
_httpSlash
.
Length
&&
buffer
.
SequenceEqual
(
offset
,
_httpSlash
,
0
,
_httpSlash
.
Length
))
...
...
@@ -355,5 +373,7 @@ namespace PcapDotNet.Packets.Http
}
private
static
readonly
byte
[]
_httpSlash
=
Encoding
.
ASCII
.
GetBytes
(
"HTTP/"
);
private
bool
?
_isValidStart
;
}
}
\ No newline at end of file
PcapDotNet/src/PcapDotNet.Packets/Http/HttpRequestDatagram.cs
View file @
57a21ac5
...
...
@@ -47,6 +47,14 @@ namespace PcapDotNet.Packets.Http
};
}
/// <summary>
/// An HTTP Request has a valid start if it contains a method, an URI, and a version.
/// </summary>
protected
override
bool
CalculateIsValidStart
()
{
return
Method
!=
null
&&
!
string
.
IsNullOrEmpty
(
Uri
)
&&
Version
!=
null
;
}
internal
HttpRequestDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
:
this
(
buffer
,
offset
,
Parse
(
buffer
,
offset
,
length
))
{
...
...
PcapDotNet/src/PcapDotNet.Packets/Http/HttpResponseDatagram.cs
View file @
57a21ac5
...
...
@@ -50,6 +50,14 @@ namespace PcapDotNet.Packets.Http
};
}
/// <summary>
/// An HTTP response has a valid start if it contains a version and a status code.
/// </summary>
protected
override
bool
CalculateIsValidStart
()
{
return
Version
!=
null
&&
StatusCode
!=
null
;
}
internal
HttpResponseDatagram
(
byte
[]
buffer
,
int
offset
,
int
length
)
:
this
(
buffer
,
offset
,
Parse
(
buffer
,
offset
,
length
))
{
...
...
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