Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Titanium-Web-Proxy
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
Titanium-Web-Proxy
Commits
fe4d5ee9
Commit
fe4d5ee9
authored
Jul 08, 2015
by
titanium007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Expose only properties that are safer to user
parent
214be692
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
737 additions
and
711 deletions
+737
-711
ProxyTestController.cs
Titanium.Web.Proxy.Test/ProxyTestController.cs
+10
-10
SessionEventArgs.cs
Titanium.Web.Proxy/Models/SessionEventArgs.cs
+90
-64
RequestHandler.cs
Titanium.Web.Proxy/RequestHandler.cs
+633
-633
ResponseHandler.cs
Titanium.Web.Proxy/ResponseHandler.cs
+4
-4
No files found.
Titanium.Web.Proxy.Test/ProxyTestController.cs
View file @
fe4d5ee9
...
...
@@ -76,11 +76,11 @@ namespace Titanium.Web.Proxy.Test
if
(
index
>=
0
)
{
string
URL
=
e
.
Decode
();
string
URL
=
e
.
GetRequestHtmlBody
();
if
(
_lastURL
!=
URL
)
{
OnChanged
(
new
VisitedEventArgs
()
{
hostname
=
e
.
Hostname
,
URL
=
URL
,
remoteIP
=
e
.
ipAddress
,
remotePort
=
e
.
Port
});
OnChanged
(
new
VisitedEventArgs
()
{
hostname
=
e
.
RequestHostname
,
URL
=
URL
,
remoteIP
=
e
.
ClientIpAddress
,
remotePort
=
e
.
Client
Port
});
}
...
...
@@ -106,7 +106,7 @@ namespace Titanium.Web.Proxy.Test
string
c
=
e
.
ServerResponse
.
GetResponseHeader
(
"X-Requested-With"
);
if
(
e
.
ServerResponse
.
GetResponseHeader
(
"X-Requested-With"
)
==
""
)
{
e
.
GetResponse
Body
();
string
responseHtmlBody
=
e
.
GetResponseHtml
Body
();
string
functioname
=
"fr"
+
RandomString
(
10
);
string
VisitedURL
=
RandomString
(
5
);
...
...
@@ -116,10 +116,10 @@ namespace Titanium.Web.Proxy.Test
string
RandomLastRequest
=
RandomString
(
10
);
string
LocalRequest
;
if
(
e
.
IsS
ecure
)
LocalRequest
=
"https://"
+
e
.
Hostname
+
"/"
+
RandomURLEnding
;
if
(
e
.
IsS
SLRequest
)
LocalRequest
=
"https://"
+
e
.
Request
Hostname
+
"/"
+
RandomURLEnding
;
else
LocalRequest
=
"http://"
+
e
.
Hostname
+
"/"
+
RandomURLEnding
;
LocalRequest
=
"http://"
+
e
.
Request
Hostname
+
"/"
+
RandomURLEnding
;
string
script
=
"var "
+
RandomLastRequest
+
" = null;"
+
"if(window.top==self) { "
+
"\n"
+
...
...
@@ -135,13 +135,13 @@ namespace Titanium.Web.Proxy.Test
RequestVariable
+
".open(\"POST\",\""
+
LocalRequest
+
"\", true); "
+
"\n"
+
RequestVariable
+
".send("
+
VisitedURL
+
");} "
+
RandomLastRequest
+
" = "
+
VisitedURL
+
"}"
;
string
response
=
e
.
ResponseString
;
Regex
RE
=
new
Regex
(
"</body>"
,
RegexOptions
.
RightToLeft
|
RegexOptions
.
IgnoreCase
|
RegexOptions
.
Multiline
);
string
replaced
=
RE
.
Replace
(
response
,
"<script type =\"text/javascript\">"
+
script
+
"</script></body>"
,
1
);
if
(
replaced
.
Length
!=
response
.
Length
)
string
modifiedResponseHtmlBody
=
RE
.
Replace
(
responseHtmlBody
,
"<script type =\"text/javascript\">"
+
script
+
"</script></body>"
,
1
);
if
(
modifiedResponseHtmlBody
.
Length
!=
responseHtmlBody
.
Length
)
{
e
.
ResponseString
=
replaced
;
e
.
SetRequestHtmlBody
(
modifiedResponseHtmlBody
)
;
_URLList
.
Add
(
RandomURLEnding
);
}
...
...
Titanium.Web.Proxy/Models/SessionEventArgs.cs
View file @
fe4d5ee9
...
...
@@ -9,84 +9,70 @@ namespace Titanium.Web.Proxy.Models
{
public
class
SessionEventArgs
:
EventArgs
{
public
string
RequestURL
{
get
;
set
;
}
public
string
Hostname
{
get
;
set
;
}
public
CustomBinaryReader
ClientStreamReader
{
get
;
set
;
}
public
string
ResponseString
{
get
;
set
;
}
public
int
RequestLength
{
get
;
set
;
}
public
Stream
ClientStream
{
get
;
set
;
}
public
Version
HttpVersion
{
get
;
set
;
}
public
bool
IsAlive
{
get
;
set
;
}
public
bool
Cancel
{
get
;
set
;
}
public
bool
IsSecure
{
get
;
set
;
}
public
int
Port
{
get
;
set
;
}
private
int
BUFFER_SIZE
;
public
HttpWebResponse
ServerResponse
{
get
;
set
;
}
public
Stream
ServerResponseStream
{
get
;
set
;
}
public
string
RequestHostname
{
get
;
set
;
}
public
bool
IsSSLRequest
{
get
;
set
;
}
public
int
ClientPort
{
get
;
set
;
}
public
IPAddress
ClientIpAddress
{
get
;
set
;
}
public
HttpWebRequest
ProxyRequest
{
get
;
set
;
}
public
Encoding
Encoding
{
get
;
set
;
}
public
bool
WasModified
{
get
;
set
;
}
public
System
.
Threading
.
ManualResetEvent
FinishedRequestEvent
{
get
;
set
;
}
public
string
UpgradeProtocol
{
get
;
set
;
}
public
HttpWebResponse
ServerResponse
{
get
;
set
;
}
internal
int
BUFFER_SIZE
;
internal
int
RequestLength
{
get
;
set
;
}
internal
Version
RequestHttpVersion
{
get
;
set
;
}
internal
bool
RequestIsAlive
{
get
;
set
;
}
internal
bool
CancelRequest
{
get
;
set
;
}
internal
CustomBinaryReader
ClientStreamReader
{
get
;
set
;
}
internal
Stream
ClientStream
{
get
;
set
;
}
internal
Stream
ServerResponseStream
{
get
;
set
;
}
internal
Encoding
Encoding
{
get
;
set
;
}
internal
bool
WasModified
{
get
;
set
;
}
internal
System
.
Threading
.
ManualResetEvent
FinishedRequestEvent
{
get
;
set
;
}
internal
string
UpgradeProtocol
{
get
;
set
;
}
internal
string
RequestHtmlBody
{
get
;
set
;
}
internal
string
ResponseHtmlBody
{
get
;
set
;
}
public
SessionEventArgs
(
int
BufferSize
)
{
BUFFER_SIZE
=
BufferSize
;
}
public
string
Decode
()
public
string
GetRequestHtmlBody
()
{
if
(
RequestHtmlBody
==
null
)
{
int
bytesRead
;
int
totalBytesRead
=
0
;
MemoryStream
mw
=
new
MemoryStream
();
var
buffer
=
ClientStreamReader
.
ReadBytes
(
RequestLength
);
while
(
totalBytesRead
<
RequestLength
&&
(
bytesRead
=
buffer
.
Length
)
>
0
)
{
totalBytesRead
+=
bytesRead
;
mw
.
Write
(
buffer
,
0
,
bytesRead
);
int
bytesRead
;
int
totalBytesRead
=
0
;
MemoryStream
mw
=
new
MemoryStream
();
var
buffer
=
ClientStreamReader
.
ReadBytes
(
RequestLength
);
while
(
totalBytesRead
<
RequestLength
&&
(
bytesRead
=
buffer
.
Length
)
>
0
)
{
totalBytesRead
+=
bytesRead
;
mw
.
Write
(
buffer
,
0
,
bytesRead
);
}
mw
.
Close
();
RequestHtmlBody
=
Encoding
.
Default
.
GetString
(
mw
.
ToArray
());
}
mw
.
Close
();
return
Encoding
.
Default
.
GetString
(
mw
.
ToArray
());
return
RequestHtmlBody
;
}
public
void
Ok
(
string
Html
)
public
void
SetRequestHtmlBody
(
string
Body
)
{
if
(
Html
==
null
)
Html
=
string
.
Empty
;
var
result
=
Encoding
.
Default
.
GetBytes
(
Html
);
StreamWriter
connectStreamWriter
=
new
StreamWriter
(
ClientStream
);
var
s
=
String
.
Format
(
"HTTP/{0}.{1} {2} {3}"
,
HttpVersion
.
Major
,
HttpVersion
.
Minor
,
200
,
"Ok"
);
connectStreamWriter
.
WriteLine
(
s
);
connectStreamWriter
.
WriteLine
(
String
.
Format
(
"Timestamp: {0}"
,
DateTime
.
Now
.
ToString
()));
connectStreamWriter
.
WriteLine
(
"content-length: "
+
result
.
Length
);
connectStreamWriter
.
WriteLine
(
"Cache-Control: no-cache, no-store, must-revalidate"
);
connectStreamWriter
.
WriteLine
(
"Pragma: no-cache"
);
connectStreamWriter
.
WriteLine
(
"Expires: 0"
);
if
(
IsAlive
)
{
connectStreamWriter
.
WriteLine
(
"Connection: Keep-Alive"
);
}
else
connectStreamWriter
.
WriteLine
(
"Connection: close"
);
connectStreamWriter
.
WriteLine
();
connectStreamWriter
.
Flush
();
ClientStream
.
Write
(
result
,
0
,
result
.
Length
);
Cancel
=
true
;
this
.
RequestHtmlBody
=
Body
;
}
public
void
GetResponse
Body
()
public
string
GetResponseHtml
Body
()
{
if
(
Response
String
==
null
)
if
(
Response
HtmlBody
==
null
)
{
Encoding
=
Encoding
.
GetEncoding
(
ServerResponse
.
CharacterSet
);
...
...
@@ -110,9 +96,16 @@ namespace Titanium.Web.Proxy.Models
ResponseData
=
DecodeData
(
ServerResponseStream
,
Encoding
);
break
;
}
Response
String
=
ResponseData
;
Response
HtmlBody
=
ResponseData
;
WasModified
=
true
;
}
return
ResponseHtmlBody
;
}
public
void
SetResponseHtmlBody
(
string
Body
)
{
this
.
ResponseHtmlBody
=
Body
;
}
//stream reader not recomended for images
private
string
DecodeData
(
Stream
ResponseStream
,
Encoding
e
)
...
...
@@ -122,12 +115,45 @@ namespace Titanium.Web.Proxy.Models
}
public
void
Ok
(
string
Html
)
{
if
(
Html
==
null
)
Html
=
string
.
Empty
;
var
result
=
Encoding
.
Default
.
GetBytes
(
Html
);
StreamWriter
connectStreamWriter
=
new
StreamWriter
(
ClientStream
);
var
s
=
String
.
Format
(
"HTTP/{0}.{1} {2} {3}"
,
RequestHttpVersion
.
Major
,
RequestHttpVersion
.
Minor
,
200
,
"Ok"
);
connectStreamWriter
.
WriteLine
(
s
);
connectStreamWriter
.
WriteLine
(
String
.
Format
(
"Timestamp: {0}"
,
DateTime
.
Now
.
ToString
()));
connectStreamWriter
.
WriteLine
(
"content-length: "
+
result
.
Length
);
connectStreamWriter
.
WriteLine
(
"Cache-Control: no-cache, no-store, must-revalidate"
);
connectStreamWriter
.
WriteLine
(
"Pragma: no-cache"
);
connectStreamWriter
.
WriteLine
(
"Expires: 0"
);
if
(
RequestIsAlive
)
{
connectStreamWriter
.
WriteLine
(
"Connection: Keep-Alive"
);
}
else
connectStreamWriter
.
WriteLine
(
"Connection: close"
);
connectStreamWriter
.
WriteLine
();
connectStreamWriter
.
Flush
();
ClientStream
.
Write
(
result
,
0
,
result
.
Length
);
CancelRequest
=
true
;
}
public
IPAddress
ipAddress
{
get
;
set
;
}
}
}
\ No newline at end of file
Titanium.Web.Proxy/RequestHandler.cs
View file @
fe4d5ee9
This diff is collapsed.
Click to expand it.
Titanium.Web.Proxy/ResponseHandler.cs
View file @
fe4d5ee9
...
...
@@ -62,25 +62,25 @@ namespace Titanium.Web.Proxy
switch
(
args
.
ServerResponse
.
ContentEncoding
)
{
case
"gzip"
:
data
=
CompressionHelper
.
CompressGzip
(
args
.
Response
String
,
args
.
Encoding
);
data
=
CompressionHelper
.
CompressGzip
(
args
.
Response
HtmlBody
,
args
.
Encoding
);
WriteResponseStatus
(
args
.
ServerResponse
.
ProtocolVersion
,
args
.
ServerResponse
.
StatusCode
,
args
.
ServerResponse
.
StatusDescription
,
responseWriter
);
WriteResponseHeaders
(
responseWriter
,
responseHeaders
,
data
.
Length
);
SendData
(
clientWriteStream
,
data
,
isChunked
);
break
;
case
"deflate"
:
data
=
CompressionHelper
.
CompressDeflate
(
args
.
Response
String
,
args
.
Encoding
);
data
=
CompressionHelper
.
CompressDeflate
(
args
.
Response
HtmlBody
,
args
.
Encoding
);
WriteResponseStatus
(
args
.
ServerResponse
.
ProtocolVersion
,
args
.
ServerResponse
.
StatusCode
,
args
.
ServerResponse
.
StatusDescription
,
responseWriter
);
WriteResponseHeaders
(
responseWriter
,
responseHeaders
,
data
.
Length
);
SendData
(
clientWriteStream
,
data
,
isChunked
);
break
;
case
"zlib"
:
data
=
CompressionHelper
.
CompressZlib
(
args
.
Response
String
,
args
.
Encoding
);
data
=
CompressionHelper
.
CompressZlib
(
args
.
Response
HtmlBody
,
args
.
Encoding
);
WriteResponseStatus
(
args
.
ServerResponse
.
ProtocolVersion
,
args
.
ServerResponse
.
StatusCode
,
args
.
ServerResponse
.
StatusDescription
,
responseWriter
);
WriteResponseHeaders
(
responseWriter
,
responseHeaders
,
data
.
Length
);
SendData
(
clientWriteStream
,
data
,
isChunked
);
break
;
default
:
data
=
EncodeData
(
args
.
Response
String
,
args
.
Encoding
);
data
=
EncodeData
(
args
.
Response
HtmlBody
,
args
.
Encoding
);
WriteResponseStatus
(
args
.
ServerResponse
.
ProtocolVersion
,
args
.
ServerResponse
.
StatusCode
,
args
.
ServerResponse
.
StatusDescription
,
responseWriter
);
WriteResponseHeaders
(
responseWriter
,
responseHeaders
,
data
.
Length
);
SendData
(
clientWriteStream
,
data
,
isChunked
);
...
...
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