Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.IO;
- namespace Klient_FTP
- {
- class Program
- {
- Int32 portPASV;
- String currentUser=String.Empty;
- static void SaveFile(String fileName, Byte[] Data)
- {
- BinaryWriter Writer = new BinaryWriter(File.OpenWrite(fileName));
- Writer.Write(Data);
- Writer.Flush();
- Writer.Close();
- }
- void Work(object obj)
- {
- Directory.CreateDirectory("C:/FTP");
- Directory.SetCurrentDirectory("C:/FTP");
- var message = ((object[])obj)[0].ToString() + " " + currentUser + '\0';
- IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 21);
- TcpClient client = new TcpClient();
- client.Connect(ep);
- StringBuilder sb = new StringBuilder();
- if (message.Contains("RETR"))
- {
- if (currentUser != String.Empty)
- {
- NetworkStream strim = client.GetStream();
- message = message.Insert(message.LastIndexOf('\0'), " " + currentUser);
- strim.Write(Encoding.ASCII.GetBytes(message), 0, message.Length);
- IPEndPoint fileEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), portPASV);
- StringBuilder msg = new StringBuilder();
- TcpClient fileClient = new TcpClient();
- fileClient.Connect(fileEndPoint);
- StringBuilder sbf = new StringBuilder();
- using (NetworkStream fileStream = fileClient.GetStream())
- {
- int _tmp;
- while ((_tmp = fileStream.ReadByte()) != 0)
- {
- sbf.Append((char)_tmp);
- }
- }
- String[] splitMessage = message.Split(' ');
- StringBuilder fileName = new StringBuilder(splitMessage[1]);
- fileName.Insert(0, '\\');
- StringBuilder XD = new StringBuilder(fileName.ToString().Substring(fileName.ToString().LastIndexOf("\\")));
- SaveFile(Directory.GetCurrentDirectory() + XD, System.Text.Encoding.ASCII.GetBytes(sbf.ToString()));
- fileClient.Close();
- client.Close();
- return;
- }
- else
- {
- Console.WriteLine("530: Access denied. Provide password before using RETR.");
- return;
- }
- }
- using (NetworkStream stream = client.GetStream())
- {
- Console.WriteLine("sent: " + message);
- stream.Write(Encoding.ASCII.GetBytes(message), 0, message.Length);
- int i;
- while ((i = stream.ReadByte()) != 0)
- {
- sb.Append((char)i);
- }
- }
- if (message.Contains("PASV"))
- {
- String[] PASVtoparse = new String[6];
- PASVtoparse = sb.ToString().Split(',');
- IPAddress localAddress = IPAddress.Parse(PASVtoparse[0] + "." + PASVtoparse[1] + "." + PASVtoparse[2] + "." + PASVtoparse[3]);
- portPASV = Int32.Parse(PASVtoparse[4]) * 256 + Int32.Parse(PASVtoparse[5]);
- Console.WriteLine("Port: " + portPASV.ToString());
- }
- else if (message.Contains("PASS"))
- {
- String[] splitMessage = message.Split(' ');
- currentUser = splitMessage[1];
- Console.WriteLine("ID klienta: " + currentUser);
- }
- Console.WriteLine("response: \n" + sb.ToString());
- client.Close();
- }
- void start(string m)
- {
- ThreadPool.QueueUserWorkItem(Work, new object[] { m });
- Thread.Sleep(200);
- }
- static void Main(string[] args)
- {
- Program p = new Program();
- string message = string.Empty;
- while (true)
- {
- Console.Write("input: ");
- message = Console.ReadLine();
- if (message != "QUIT") p.start(message);
- else break;
- }
- //press any key to exit
- Console.ReadKey();
- Environment.Exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement