All pastes #988143 Raw Edit

wlmprox

public text v1 · immutable
#988143 ·published 2008-04-17 09:42 UTC
rendered paste body
//WLM proxy\modify outgoing ingoing packets. by ike_x (c) Orioncode

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace wlmprox
{
    public class info
    {
        //messenger.hotmail.com = 65.54.239.80
        public static string NSaddress = "65.54.239.80";
        public static int NSport = 1863;
        public static int NSLport = 1863;
        public static string NS2address = "";
        public static int NS2port = 0;
        public static int NS2Lport = 1864;
        public static int srvports = 40000;
    }

    public class srvRead
    {
        public string name = "";
        TcpClient client = null;
        TcpClient rclient = null;

        StreamReader sr = null;
        StreamReader rsr = null;
        StreamWriter sw = null;
        StreamWriter rsw = null;

        public srvRead(TcpClient _client, TcpClient _rclient, string _name)
        {
            client = _client;
            rclient = _rclient;
            name = _name;

            NetworkStream ns = client.GetStream();
            NetworkStream rns = rclient.GetStream();

            sr = new StreamReader(ns);
            rsr = new StreamReader(rns);
            sw = new StreamWriter(ns);
            rsw = new StreamWriter(rns);
            sw.AutoFlush = true;
            rsw.AutoFlush = true;
        }

        public void Read1()//Client
        {
            try
            {
                while (client.Connected && rclient.Connected)
                {
                    string cdata = sr.ReadLine();
                    if (cdata.Trim() != "")
                    {
                        ReceivedArgs e = new ReceivedArgs();
                        e.data = cdata;
                        e.from = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                        e.to = ((IPEndPoint)rclient.Client.RemoteEndPoint).Address.ToString();
                        e.who = "client";
                        onRecieved(this, e);
                        Send(rsw, cdata);
                    }
                }
            }
            catch (Exception e)
            {
                rclient.Close();
                client.Close();
                onDebugMessage(e.Message.ToString());
            }
        }
        public void Read2()//MsnServer
        {
            try
            {
                while (client.Connected && rclient.Connected)
                {
                    string cdata = rsr.ReadLine();
                    if (cdata.Trim() != "")
                    {
                        ReceivedArgs e = new ReceivedArgs();
                        e.data = cdata;
                        e.from = ((IPEndPoint)rclient.Client.RemoteEndPoint).Address.ToString();
                        e.to = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                        e.who = "server";
                        onRecieved(this, e);
                        string[] arrcdata = cdata.Split(' ');
                        if (arrcdata[0].Trim() == "XFR" && arrcdata[2].Trim() == "NS") //Move To NS
                        {
                            
                            info.NS2address = arrcdata[3].Split(':')[0];
                            info.NS2port = int.Parse(arrcdata[3].Split(':')[1]);
                            onInfoMessage(string.Format("Changing {0} to {1}", arrcdata[3], "10.1.1.2:"+info.NS2Lport));
                            Send(sw, cdata.Replace(arrcdata[3], "10.1.1.2:"+info.NS2Lport));
                            onXFR();
                        }
                        else if (arrcdata[0].Trim() == "XFR" && arrcdata[2].Trim() == "SB") // SB relay
                        {
                            System.Windows.Forms.MessageBox.Show(cdata);
                            XFRSBArgs ee = new XFRSBArgs();
                            info.srvports++;
                            ee.nextport = info.srvports;
                            ee.remoteaddr = arrcdata[3].Split(':')[0];
                            ee.remoteport = int.Parse(arrcdata[3].Split(':')[1]);
                            onXFRSB(ee);
                            Send(sw, cdata.Replace(arrcdata[3], "10.1.1.2:" + ee.nextport));
  
                        }
                        else
                        {
                            Send(sw, cdata);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                rclient.Close();
                client.Close();
                onDebugMessage(e.Message.ToString());
            }
        }

        public void Send(StreamWriter sw, string data)
        {
            try
            {
                if (client.Connected && rclient.Connected)
                {
                    sw.AutoFlush = true;
                    sw.WriteLine(data);
                    SendArgs e = new SendArgs();
                    e.data = data;
                    //e.client = client;
                    onSend(this, e);
                }
            }
            catch (Exception e)
            {
                rclient.Close();
                client.Close();
                onDebugMessage(e.Message.ToString());
            }
        }
        public event onSendHandler onSend;
        public event onRecievedHandler onRecieved;
        public event onDebugMessageHandler onDebugMessage;
        public event onInfoMessageHandler onInfoMessage;
        public event onXFRHandler onXFR;
        public event onXFRSBHandler onXFRSB;
    }

    public class Servers
    {
        
        public void NewNSlisten()
        {
            try
            {
                onInfoMessage("NS Relay 1 Running.. ");
                TcpListener serve = new TcpListener(IPAddress.Any, info.NSLport);
                serve.Start();
                while (true)
                {
                    TcpClient client = serve.AcceptTcpClient();
                    ConnectionArgs e = new ConnectionArgs();
                    e.client = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                    e.host = info.NSaddress;
                    onNSConnection(this, e);
                    TcpClient rclient = new TcpClient();
                    rclient.Connect(info.NSaddress, info.NSport);
                    srvRead test = new srvRead(client, rclient, "NS relay");
                    Thread Read1 = new Thread(new ThreadStart(test.Read2));
                    Thread Read2 = new Thread(new ThreadStart(test.Read1));
                    Read2.Start();
                    Read1.Start();
                    test.onRecieved += new onRecievedHandler(test_onRecieved);
                    test.onSend += new onSendHandler(test_onSend);
                    test.onDebugMessage += new onDebugMessageHandler(test_onDebugMessage);
                    test.onInfoMessage += new onInfoMessageHandler(test_onInfoMessage);
                    test.onXFR += new onXFRHandler(test_onXFR);
                    test.onXFRSB += new onXFRSBHandler(test_onXFRSB);
                }
            }
            catch (Exception e)
            {
                onDebugMessage(e.Message);
            }
        }

        public void Newlisten()
        {
            try
            {
                onInfoMessage("NS Relay 2 Running.. ");
                TcpListener serve = new TcpListener(IPAddress.Any, info.NS2Lport);
                serve.Start();
                while (true)
                {
                    TcpClient client = serve.AcceptTcpClient();
                    ConnectionArgs e = new ConnectionArgs();
                    e.client = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                    e.host = info.NS2address;
                    onNSConnection(this, e);
                    TcpClient rclient = new TcpClient();
                    rclient.Connect(info.NS2address, info.NS2port);
                    srvRead test = new srvRead(client, rclient, "NS2 Relay");
                    Thread Read1 = new Thread(new ThreadStart(test.Read2));
                    Thread Read2 = new Thread(new ThreadStart(test.Read1));
                    Read2.Start();
                    Read1.Start();
                    test.onRecieved += new onRecievedHandler(test_onRecieved);
                    test.onSend += new onSendHandler(test_onSend);
                    test.onDebugMessage += new onDebugMessageHandler(test_onDebugMessage);
                    test.onInfoMessage += new onInfoMessageHandler(test_onInfoMessage);
                    test.onXFRSB += new onXFRSBHandler(test_onXFRSB);
                }
            }
            catch (Exception e)
            {
                onDebugMessage(e.Message);
            }
        }
        public void test_onXFRSB(XFRSBArgs e)
        {
            onXFRSB(e);
        }
        public void test_onXFR()
        {
            onXFR();
        }
        public void test_onInfoMessage(string message)
        {
            onInfoMessage(message);
        }
        public void test_onDebugMessage(string message)
        {
            onDebugMessage(message);
        }
        public void test_onRecieved(object sender, ReceivedArgs e)
        {
            onRecieved(sender, e);
        }
        public void test_onSend(object sender, SendArgs e)
        {
            onSend(sender, e);
        }

        public void Send(StreamWriter sw, string data)
        {
            sw.AutoFlush = true;
            sw.WriteLine(data);
            SendArgs e = new SendArgs();
            e.data = data;
            //e.client = client;
            onSend(this, e);
        }

        public Servers() { }

        //Events:
        public event onNSConnectionHandler onNSConnection;
        public event onSendHandler onSend;
        public event onRecievedHandler onRecieved;
        public event onDebugMessageHandler onDebugMessage;
        public event onInfoMessageHandler onInfoMessage;
        public event onXFRHandler onXFR;
        public event onXFRSBHandler onXFRSB;
    }

    public class XFRsrv
    {
        public int lport = 0;
        public string raddress = "";
        public int rport = 0;

        public XFRsrv(int _lport, string _raddress, int _rport)
        {
            lport = _lport;
            rport = _rport;
            raddress = _raddress;
        }

        public void start()
        {
            try
            {
                onInfoMessage(string.Format("XFR Relay to {0}", raddress));
                TcpListener serve = new TcpListener(IPAddress.Any, lport);
                serve.Start();
                while (true)
                {
                    TcpClient client = serve.AcceptTcpClient();
                    ConnectionArgs e = new ConnectionArgs();
                    e.client = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                    e.host = raddress;
                    onNSConnection(this, e);
                    TcpClient rclient = new TcpClient();
                    rclient.Connect(raddress, rport);
                    srvRead test = new srvRead(client, rclient, "XFR Relay");
                    Thread Read1 = new Thread(new ThreadStart(test.Read2));
                    Thread Read2 = new Thread(new ThreadStart(test.Read1));
                    Read2.Start();
                    Read1.Start();
                    test.onRecieved += new onRecievedHandler(test_onRecieved);
                    test.onSend += new onSendHandler(test_onSend);
                    test.onDebugMessage += new onDebugMessageHandler(test_onDebugMessage);
                    test.onInfoMessage += new onInfoMessageHandler(test_onInfoMessage);
                }
            }
            catch (Exception e)
            {
                onDebugMessage(e.Message);
            }

        }
        public void test_onInfoMessage(string message)
        {
            onInfoMessage(message);
        }
        public void test_onDebugMessage(string message)
        {
            onDebugMessage(message);
        }
        public void test_onRecieved(object sender, ReceivedArgs e)
        {
            onRecieved(sender, e);
        }
        public void test_onSend(object sender, SendArgs e)
        {
            onSend(sender, e);
        }
        //Events:
        public event onNSConnectionHandler onNSConnection;
        public event onSendHandler onSend;
        public event onRecievedHandler onRecieved;
        public event onDebugMessageHandler onDebugMessage;
        public event onInfoMessageHandler onInfoMessage;
    }

    //Event delegates:
    public delegate void onNSConnectionHandler(object sender, ConnectionArgs e);
    public delegate void onSendHandler(object sender, SendArgs e);
    public delegate void onRecievedHandler(object sender, ReceivedArgs e);
    public delegate void onDebugMessageHandler(string DebugMessage);
    public delegate void onInfoMessageHandler(string InfoMessage);
    public delegate void onXFRHandler();
    public delegate void onXFRSBHandler(XFRSBArgs e);

    //EventArgs:   
    public class ConnectionArgs : EventArgs { public string host; public string client; }
    public class SendArgs : EventArgs { public string data; public TcpClient client; }
    public class ReceivedArgs : EventArgs { public string data; public string from; public string to; public string who; }
    public class XFRSBArgs : EventArgs { public int nextport; public int remoteport; public string remoteaddr;}
}