pkmn-classic-framework/sslProxy/Program.cs

64 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Net;
namespace sslProxy
{
class Program
{
public static X509Certificate2 m_cert;
static void Main(string[] args)
{
TcpListener listener = new TcpListener(new IPAddress(new byte[]{10, 211, 55, 8}), 12401);
Directory.CreateDirectory("log");
m_cert = new X509Certificate2("iis private key.pfx", "letmein");
// turn off cert validation entirely...
// http://stackoverflow.com/questions/777607/the-remote-certificate-is-invalid-according-to-the-validation-procedure-using
listener.Start();
Console.WriteLine("Waiting for connection...");
while (true)
{
if (!listener.Pending())
{
Thread.Sleep(5);
continue;
}
BeginConversation(listener.AcceptTcpClient());
}
}
static void BeginConversation(TcpClient client)
{
Console.WriteLine("Received connection from {0}", client.Client.AddressFamily);
SslStream sslClient = new SslStream(client.GetStream());
sslClient.AuthenticateAsServer(m_cert);
TcpClient server = new TcpClient("pkgdsprod.nintendo.co.jp", 12401);
SslStream sslServer = new SslStream(server.GetStream(), false, delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; });
sslServer.AuthenticateAsClient("pkgdsprod.nintendo.co.jp");
ThreadPool.QueueUserWorkItem(delegate(object state)
{
sslServer.CopyTo(sslClient);
});
ThreadPool.QueueUserWorkItem(delegate(object state)
{
sslClient.CopyTo(sslServer);
});
}
}
}