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