How do you do this?
i found IPAddress which has both HostToNetworkOrder and NetworkToHostOrder which work for htons and the otherone i can't remember.
I'm thinking the IPAddress.Parse Member is for inet_addr and ntoa but i can't seem to get it to work ;|
I get this when i run it:Code:public static void Main() { Test p = new Test(); p.Port = 1080; p.Type = 4; p.UserID = "anonymous"; p.Password = "blah"; p.Server2 = "USEast.Battle.Net"; p.Port2 = 6112; if (File.Exists(FILE_NAME) == true) { Console.WriteLine("{0} Exists, Loading..."); StreamReader sr = File.OpenText(FILE_NAME); string input; while ((input = sr.ReadLine()) != null) { Console.WriteLine("Validating Address..."); Regex r = new Regex(@"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b", RegexOptions.Compiled); Match m = r.Match(input); if (m.Success == true) { Console.WriteLine("{0} is Valid!", m.Value); try { Socket mySocket; if ((mySocket = Connect(m.Value, p.Port)) != null) { NetworkStream myNetworkStream = new NetworkStream(mySocket); if (myNetworkStream.CanWrite == true) { StreamWriter myStreamWriter = new StreamWriter(myNetworkStream); DataBuffer myDataBuffer = new DataBuffer(); if (p.Type == 4) { Console.WriteLine("SOCKS 4 Connected, Authenticating..."); myDataBuffer.InsertByte(4); myDataBuffer.InsertByte(1); myDataBuffer.InsertInt16(IPAddress.HostToNetworkOrder(p.Port2)); myDataBuffer.InsertByteArray(Parse(p.Server2)); myDataBuffer.InsertCString(p.UserID); } else if (p.Type == 5) { myDataBuffer.InsertByte(5); myDataBuffer.InsertByte(3); myDataBuffer.InsertByte(0); myDataBuffer.InsertByte(2); } myDataBuffer.WriteToOutputStream(myStreamWriter.BaseStream); if (myNetworkStream.CanRead == true) { int count = 0; do { StreamReader myStreamReader = new StreamReader(myNetworkStream); DataReader myDataReader = new DataReader(myStreamReader.BaseStream); myDataReader.Seek(1); if (p.Type == 4) { switch (myDataReader.ReadByte()) { case 0x90: Console.WriteLine("SOCKS 4 Request Granted"); break; case 0x91: Console.WriteLine("SOCKS 4 Request Rejected Or Failed"); break; case 0x92: Console.WriteLine("SOCKS 4 Request Rejected Because SOCKS server cannot IDENT on the client"); break; case 0x93: Console.WriteLine("SOCKS 4 Request Rejected Because the Client Program and the ID Report Different User-IDs"); break; default: Console.WriteLine("SOCKS 4 Request Failed, Unknown Reason"); break; } } else if (p.Type == 5) { myDataReader.Seek(1); count++; switch (count) { case 0x01: switch (myDataReader.ReadByte()) { case 0x00: Console.WriteLine("SOCKS 5 Connected, Authenticating..."); myDataBuffer.InsertByte(5); myDataBuffer.InsertByte(1); myDataBuffer.InsertByte(0); myDataBuffer.InsertByte(1); myDataBuffer.InsertInt16(IPAddress.HostToNetworkOrder(p.Port2)); myDataBuffer.InsertByteArray(Parse(p.Server2)); myDataBuffer.WriteToOutputStream(myStreamWriter.BaseStream); count++; break; case 0x02: Console.WriteLine("SOCKS 5 Connected, UserID/Password Required, Sending..."); myDataBuffer.InsertByte(1); myDataBuffer.InsertByte(Convert.ToByte(p.UserID.Length)); myDataBuffer.InsertByteArray(Encoding.ASCII.GetBytes(p.UserID)); myDataBuffer.InsertByte(Convert.ToByte(p.Password.Length)); myDataBuffer.InsertByteArray(Encoding.ASCII.GetBytes(p.Password)); break; case 0xFF: Console.WriteLine("SOCKS 5 Connected, No Methods Supported"); break; default: Console.WriteLine("SOCKS 5 Request Failed, Unknown Reason"); break; } break; case 0x02: switch (myDataReader.ReadByte()) { case 0x00: Console.WriteLine("SOCKS 5 UserID/Password Accepted, Authenticating..."); myDataBuffer.InsertByte(5); myDataBuffer.InsertByte(1); myDataBuffer.InsertByte(0); myDataBuffer.InsertByte(1); myDataBuffer.InsertInt16(IPAddress.HostToNetworkOrder(p.Port2)); myDataBuffer.InsertByteArray(Parse(p.Server2)); myDataBuffer.WriteToOutputStream(myStreamWriter.BaseStream); break; default: Console.WriteLine("SOCKS 5 Request Failed, UserID/Password Rejected"); break; } break; case 0x03: switch (myDataReader.ReadByte()) { case 0x00: Console.WriteLine("SOCKS 5: Request Granted"); break; case 0x01: Console.WriteLine("SOCKS 5: Request Failed, General Server Failure"); break; case 0x02: Console.WriteLine("SOCKS 5: Request Failed, Connection Not Allowed By Ruleset"); break; case 0x03: Console.WriteLine("SOCKS 5: Request Failed, Network Unreachable"); break; case 0x04: Console.WriteLine("SOCKS 5: Request Failed, Host Unreachable"); break; case 0x05: Console.WriteLine("SOCKS 5: Request Failed, Connection Refused"); break; case 0x06: Console.WriteLine("SOCKS 5: Request Failed, TTL Expired"); break; case 0x07: Console.WriteLine("SOCKS 5: Request Failed, Command Not Supported"); break; case 0x08: Console.WriteLine("SOCKS 5: Request Failed, Address type not supported"); break; default: Console.WriteLine("SOCKS 5: Request Failed, Unknown Reason"); break; } break; default: Console.WriteLine("SOCKS 5 Unexpected Message Recieved"); break; } } } while(myNetworkStream.DataAvailable == true); } else if (myNetworkStream.CanRead == false) { Console.WriteLine("Network Stream is Not Readable!"); } } else if (myNetworkStream.CanWrite == false) { Console.WriteLine("Network Stream is Not Writeable!"); } } else { Console.WriteLine("Socket is NULL"); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } } else { Console.WriteLine("{0} was not found.", FILE_NAME); } Console.ReadLine(); } public static byte[] Parse(string Server) { IPAddress address = IPAddress.Parse(Server); return address.GetAddressBytes(); }
I could also use some tips to making my code... BETTER. It looks horrible, and i'm sure it's HORRIBLY inefficient, haha.Code:{0} Exists, Loading... Validating Address... 211.143.183.66 is Valid! Connecting To... 211.143.183.66 on Port 1080... Connection Established! SOCKS 4 Connected, Authenticating... System.FormatException: An invalid IP address was specified. at System.Net.IPAddress.Parse(String ipString) at Test.Parse(String Server) in c:\documents and settings\joel zimmerman\my d ocuments\my programming\c#\proxy\proxy.gui.console\entrypoint.cs:line 356 at Test.Main() in c:\documents and settings\joel zimmerman\my documents\my pr ogramming\c#\proxy\proxy.gui.console\entrypoint.cs:line 153 Validating Address... 61.139.59.112 is Valid! Connecting To... 61.139.59.112 on Port 1080... Connection Established! SOCKS 4 Connected, Authenticating... System.FormatException: An invalid IP address was specified. at System.Net.IPAddress.Parse(String ipString) at Test.Parse(String Server) in c:\documents and settings\joel zimmerman\my d ocuments\my programming\c#\proxy\proxy.gui.console\entrypoint.cs:line 356 at Test.Main() in c:\documents and settings\joel zimmerman\my documents\my pr ogramming\c#\proxy\proxy.gui.console\entrypoint.cs:line 153 Validating Address... 200.168.38.160 is Valid! Connecting To... 200.168.38.160 on Port 1080... Connection Established! SOCKS 4 Connected, Authenticating... System.FormatException: An invalid IP address was specified. at System.Net.IPAddress.Parse(String ipString) at Test.Parse(String Server) in c:\documents and settings\joel zimmerman\my d ocuments\my programming\c#\proxy\proxy.gui.console\entrypoint.cs:line 356 at Test.Main() in c:\documents and settings\joel zimmerman\my documents\my pr ogramming\c#\proxy\proxy.gui.console\entrypoint.cs:line 153 Validating Address... 199.77.129.53 is Valid! Connecting To... 199.77.129.53 on Port 1080...
Thank You
- Joel





Reply With Quote