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;}
}