Skip to content

Instantly share code, notes, and snippets.

@dsimunic
Last active December 24, 2015 15:39
Show Gist options
  • Save dsimunic/6821532 to your computer and use it in GitHub Desktop.
Save dsimunic/6821532 to your computer and use it in GitHub Desktop.
open System.IO
open System.Threading
open System.Net
open System.Net.Sockets
let mirror (clientStream:Stream) (serverStream:Stream) = async {
while true do
let! onebyte = clientStream.AsyncRead(1)
do! serverStream.AsyncWrite(onebyte)
}
let proxy (clientStream:Stream) (serverStream:Stream) =
[| mirror clientStream serverStream; mirror serverStream clientStream |]
|> Async.Parallel
|> Async.RunSynchronously
let stream (client:TcpClient) = client.GetStream()
let tcp_ip_proxy (sourceip,sourceport) (targetip,targetport) =
let server = new TcpListener(IPAddress.Parse(sourceip),sourceport)
server.Start()
while true do
let client = server.AcceptTcpClient()
let up = new TcpClient(targetip,targetport)
let t = new Thread(ThreadStart(fun _ ->
try
stream (client) |> proxy <| stream(up) |> ignore
with |_ -> ())
, IsBackground = true)
t.Start()
tcp_ip_proxy ("127.0.0.1",8080) ("66.249.81.104",80)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment