FTP Materi.pdf

12
FTP(File Transfer Protocol) Pendahuluan File Transfer Protokol (FTP) adalah suatu protokol yang berfungsi untuk tukar-menukar file dalam suatu network yang mensupport TCP/IP protokol. Dua hal penting yang ada dalam FTP adalah FTP server dan FTP Client. FTP server menjalankan software yang digunakan untuk tukar menukar file, yang selalu siap memberian layanan FTP apabila mendapat request dari FTP client. FTP client adalah komputer yang merequest koneksi ke FTP server untuk tujuan tukar menukar file (mengupload atau mendownload file). Tujuan FTP server adalah sebagai berikut : 1. Untuk men-sharing data. 2. Untuk menyediakan indirect atau implicit remote computer. 3. Untuk menyediakan tempat penyimpanan bagi user. 4. Untuk menyediakan transfer data yang reliable dan efisien. FTP sebenarnya cara yang tidak aman untuk mentransfer file karena file tersebut ditransfer tanpa melalui enkripsi terlebih dahulu tetapi melalui clear text. Mode text yang dipakai untuk transfer data adalah format ASCII atau format Binary. Secara default, ftp menggunakan mode ASCII untuk transfer data. Karena pengirimannya tanpa enkripsi, maka username, password, data yang ditransfer, maupun perintah yang dikirim dapat di sniffing oleh orang dengan menggunakan protocol analyzer (Sniffer). Solusi yang digunakan adalah dengan menggunakan SFTP (SSH FTP) yaitu FTP yang berbasis pada SSH atau menggunakan FTPS (FTP over SSL) sehingga data yang dikirim terlebih dahulu dienkripsi (dikodekan). FTP biasanya menggunakan dua buah port yaitu port 20 dan 21 dan berjalan exclusively melalui TCP. FTP server Listen pada port 21 untuk incoming connection dari FTP client. Biasanya port 21 untuk command port dan port 20 untuk data port. Pada FTP server, terdapat 2 mode koneksi yaitu aktif mode dan pasif mode. Tujuan 1. Mahasiswa mengetahui apa itu ftp. 2. Mahasiswa mampu membuat ftp server dengan memanfaatkan IIS dari window. 3. Mahasiswa mampu membuat ftp client dengan menggunakan bahasa pemrograman C#.

description

Materi tentang pembuatan FTP divisual C#

Transcript of FTP Materi.pdf

Page 1: FTP Materi.pdf

FTP(File Transfer Protocol)

Pendahuluan

File Transfer Protokol (FTP) adalah suatu protokol yang berfungsi untuk tukar-menukar file dalam suatu network

yang mensupport TCP/IP protokol. Dua hal penting yang ada dalam FTP adalah FTP server dan FTP Client.

FTP server menjalankan software yang digunakan untuk tukar menukar file, yang selalu siap memberian layanan FTP

apabila mendapat request dari FTP client.

FTP client adalah komputer yang merequest koneksi ke FTP server untuk tujuan tukar menukar file (mengupload atau

mendownload file). Tujuan FTP server adalah sebagai berikut :

1. Untuk men-sharing data.

2. Untuk menyediakan indirect atau implicit remote computer.

3. Untuk menyediakan tempat penyimpanan bagi user.

4. Untuk menyediakan transfer data yang reliable dan efisien.

FTP sebenarnya cara yang tidak aman untuk mentransfer file karena file tersebut ditransfer tanpa melalui enkripsi

terlebih dahulu tetapi melalui clear text. Mode text yang dipakai untuk transfer data adalah format ASCII atau format

Binary. Secara default, ftp menggunakan mode ASCII untuk transfer data. Karena pengirimannya tanpa enkripsi,

maka username, password, data yang ditransfer, maupun perintah yang dikirim dapat di sniffing oleh orang dengan

menggunakan protocol analyzer (Sniffer).

Solusi yang digunakan adalah dengan menggunakan SFTP (SSH FTP) yaitu FTP yang berbasis pada SSH atau

menggunakan FTPS (FTP over SSL) sehingga data yang dikirim terlebih dahulu dienkripsi (dikodekan).

FTP biasanya menggunakan dua buah port yaitu port 20 dan 21 dan berjalan exclusively melalui TCP. FTP server

Listen pada port 21 untuk incoming connection dari FTP client. Biasanya port 21 untuk command port dan port 20

untuk data port. Pada FTP server, terdapat 2 mode koneksi yaitu aktif mode dan pasif mode.

Tujuan

1. Mahasiswa mengetahui apa itu ftp.

2. Mahasiswa mampu membuat ftp server dengan memanfaatkan IIS dari window.

3. Mahasiswa mampu membuat ftp client dengan menggunakan bahasa pemrograman C#.

Page 2: FTP Materi.pdf

Praktek

Membuat Ftp Server dengan IIS.

1. Control Panel + Programs

2. Pilih Turn Windows Feature on or off

3. Pilih Internet Information Services, centang ftp dan web management tools

Page 3: FTP Materi.pdf

4. Ketikkan “iis” pada search and program + klik kanan sites pilih add FTP site.

5. Ketikkan “iis” pada search and program + klik kanan sites pilih add FTP site. Kemudian isikan ftp site name

dan physical path yang akan di sharing. Next.

Page 4: FTP Materi.pdf

6. Ketikkan “iis” pada search and program + klik kanan sites pilih add FTP site. Kemudian isikan ftp site name

dan physical path yang akan di sharing. Next.

Page 5: FTP Materi.pdf

7. Pada bagian autentification centang Anonymous dan Basic. Authorization pilih specified user : isikan

username administrator pc anda. finish

8. Pada dexama home lihat FTP Autorization rulenya. Pada specified user isikan username administratornya

kemudian ok.

Page 6: FTP Materi.pdf

9. Buat user dengan nama specified user kalo dicontoh saya berikan nama dexama. Untuk latihan kali ini

mahasiswa bias membuat user sesuai dengan keinginan dari user.

10. Test dengan buka browser isikan pada url : ftp://localhost. Kemudian isikan username dan passwordnya.

11. Kemudian cek apakah benar file yang anda sharing

Page 7: FTP Materi.pdf

Buatkan Tampilan sebagai berikut dalam 1 project :

FormLogin

FormClient

Coding untuk form Login

Tambahkan library pada masing-masing form:

using System.Net; using System.Net.Sockets; using System.IO; using System.Collections;

Tambahkan object pada form login:

FormClient ClientForm = new FormClient();

Tambahkan coding event click pada tombol login

//Membuat TCP sesuai dengan tujuan ip dan port dari FTP TcpClient clientSocket = new TcpClient(textBoxServerIP.Text,21); //untuk menyediakan aliran data, "NetStrm" merupakan object dari formClient ClientForm.NetStrm = clientSocket.GetStream(); //Untuk pembacaan data/command dari ftp StreamReader RdStrm = new StreamReader(ClientForm.NetStrm); StatusLabel.Text = RdStrm.ReadLine();

Lisbox Lisbox

Richtetextbox

Page 8: FTP Materi.pdf

//untuk mengirimkan pesan untuk login sesuai dengan username dan password FTP StatusLabel.Text = ClientForm.sendFTPCmd("USER "+textBoxUsername.Text+"\r\n"); StatusLabel.Text = ClientForm.sendFTPCmd("PASS "+ textBoxPassword.Text + "\r\n"); //untuk mengecek apakah ada error dari text status label if (!(StatusLabel.Text.Substring(0,3).Equals("230"))){ MessageBox.Show("Failed to Login"); }else{ //untuk melakukan load formClient if (ClientForm.IsDisposed) { ClientForm = new FormClient(); //ini digunakan agar kita bisa akses form login beserta komponennya ClientForm.frmlogin = this; ClientForm.server = textBoxServerIP.Text; ClientForm.Show(); } else { ClientForm.frmlogin = this; ClientForm.server = textBoxServerIP.Text; ClientForm.Show(); } //memanggil method getRemoteFolders pada ClientForm ClientForm.getRemoteFolders(); //Pada client form berikan judul [logged in] ClientForm.Text += "[logged in]"; this.Visible = false;

Coding untuk form Client

Pada form client buat object dan variable public FormLogin frmlogin; public NetworkStream NetStrm; public string Remotepath = ""; public string server = ""; public Boolean mode; const int bufferFile = 2048;

Buat function dan procedure baru pada Class FormClient //mengirimkan command ftp server public String sendFTPCmd(String cmd) { byte[] szData; string returnData = ""; //object untuk membaca netsream NetStrm StreamReader RdStrm = new StreamReader(NetStrm); //convert data menjadi byte szData = Encoding.ASCII.GetBytes(cmd.ToCharArray()); //kirimkan perintah ke ftp NetStrm.Write(szData, 0, szData.Length); richTextBoxStatus.AppendText( "\r \nSent:" + cmd); //mendapatkan hasil reponsenya returnData = RdStrm.ReadLine(); richTextBoxStatus.AppendText("\r \n Rcvd:" + returnData); return returnData; }

Page 9: FTP Materi.pdf

// method untuk mendapatkan hasil perintah dari server public byte[] sendPassiveFTPcmd(string cmd) { byte[] szData; ArrayList al = new ArrayList(); byte[] recvByte = new byte[byte.MaxValue]; Int32 bytes; Int32 totalLength =0; //Int32 totalLenght = 0; // convert menjadi byte szData = Encoding.ASCII.GetBytes(cmd.ToCharArray()); //membuat object untuk pengiriman data jaringan NetworkStream passiveconnection; //membuat passive connection passiveconnection = createPassiveConnection(); //menampilkan status ke richtextbox richTextBoxStatus.AppendText ("\r\nSent:" + cmd); //membaca netstrm StreamReader commandStream = new StreamReader(NetStrm); //write data melalui media socket NetStrm.Write(szData,0,szData.Length); //untuk mendapatkan hasil perintah dari server while (true) { bytes = passiveconnection.Read(recvByte, 0, recvByte.Length); if (bytes<=0) break; totalLength+=bytes; al.AddRange(recvByte); } al = al.GetRange(0, totalLength); richTextBoxStatus.AppendText( "\r\nRcvd" + commandStream.ReadLine()); richTextBoxStatus.AppendText( "\r\nRcvd" + commandStream.ReadLine()); return (byte[])al.ToArray((new byte()).GetType()); } //method untuk passive connection public NetworkStream createPassiveConnection() { String[] commaSeperatedValues; int highByte=0; int lowByte=0; int passivePort=0; String response = ""; response = sendFTPCmd("PASV\r\n"); //menghitung port yang akan digunakan commaSeperatedValues = response.Split(",".ToCharArray()); highByte = Convert.ToInt16(commaSeperatedValues[4])*256; commaSeperatedValues[5] = commaSeperatedValues[5].Substring(0,commaSeperatedValues[5].IndexOf(")")); lowByte = Convert.ToInt16(commaSeperatedValues[5]); passivePort = highByte + lowByte; //perintah diatas akan menghitung port yang akan digunakan TcpClient clientSocket = new TcpClient(server, passivePort); NetworkStream pasvStrm = clientSocket.GetStream(); return pasvStrm; }

Page 10: FTP Materi.pdf

//mendapatkan nama folder dan file public void getRemoteFolders() { string[] FilesAndFolder; string FileOrFolder; string FolderList; int lastSpace = 0; //mendapatkan file ya FolderList = Encoding.ASCII.GetString(sendPassiveFTPcmd("LIST\r\n")); //lisbox di clear lbFiles.Items.Clear(); lbFolder.Items.Clear(); //masukkan sederetan name dipisahkan berdasarkan \n ke array FilesAndFolder = FolderList.Split("\n".ToCharArray()); //perintah menampilkan file dan folder for (int i = 0; i < FilesAndFolder.GetUpperBound(0); i++) { if ((FilesAndFolder[i].StartsWith("-")) || (FilesAndFolder[i].StartsWith("d"))) { //jika bukan direktory ambil karakter mulai dari posisi 39 lastSpace = 59; } else { //jika direktory ambil karakter mulai dari posisi 39 lastSpace = 39; } FileOrFolder = FilesAndFolder[i].Substring(lastSpace); //menuliskan ke listbox if (FileOrFolder.IndexOf(".") != -1) { lbFiles.Items.Add(FileOrFolder.Trim()); } else { lbFolder.Items.Add(FileOrFolder.Trim()); } } }

Buat coding pada masing-masing component sesuai dengan event yang ada pada coding dibawah. Coba latihan

dengan melihat coding tanpa petunjuk seperti latihan sebelumnya:

//method yang digunakan untuk memilih folder kemudian filenya terlihat private void lbFolder_SelectedIndexChanged(object sender, EventArgs e) { //menyimpan path yang akan di tuju if (mode == false) Remotepath += "/" + lbFolder.SelectedItem.ToString(); else Remotepath = "/" + lbFolder.SelectedItem.ToString(); mode = false; sendFTPCmd("CWD /" + Remotepath + "\r\n"); getRemoteFolders(); }

Page 11: FTP Materi.pdf

//method ini berguna untuk mode up atau back pada explorer private void buttonRoot_Click(object sender, EventArgs e) { //command ftp untuk melakukan back "/" sendFTPCmd("CWD /\r\n"); //menampilkan folder ke listbox mode = true; getRemoteFolders(); } // method yang digunakan untuk melakukan upload file ke folder ftp private void buttonUpload_Click(object sender, EventArgs e) { int countSizeFile = 0; // pada saat button di klik maka akan memunculkan showdialog if (openFileDialog1.ShowDialog() == DialogResult.OK) { // deklarasi objek untuk pengiriman data jaringan NetworkStream passiveConnection; // membuat objek untuk class file info FileInfo fileParse = new FileInfo(openFileDialog1.FileName); // membuat objek file stream untuk melakukan penulisan FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open); //untuk menyediakan array byte kemudian simpan ke fileData byte[] fileData = new byte[bufferFile]; countSizeFile = fs.Read(fileData, 0, bufferFile); //membuat koneksi pasif passiveConnection = createPassiveConnection(); //memberitahukan server untuk menerima data dari client string cmd = "STOR " + fileParse.Name + "\r\n"; // menuliskan status ke richtextbox richTextBoxStatus.AppendText("\r\nSent:" + cmd); //menyimpan hasil response pada saat kirimkan command ftp string response = sendFTPCmd(cmd); //response kemudian dituliskan ke richtextboox richTextBoxStatus.AppendText("\r\nRcvd:" + response); //menulis data ke server while (countSizeFile != 0) { //melakukan copy passiveConnection.Write(fileData,0,countSizeFile); countSizeFile = fs.Read(fileData, 0, bufferFile); } fs.Close(); //setelah menulis lakukan close passiveConnection.Close(); //tampilkan pesan upload MessageBox.Show("uploaded"); //tampilkan status ke richtextbox richTextBoxStatus.AppendText("\r\nRcvd:" + new StreamReader(NetStrm).ReadLine()); //tampilkan ke masing-masing listbox menu getRemoteFolders(); } }

TOSHIBA
Highlight
TOSHIBA
Sticky Note
Ganti coding untuk melakukan back folder
Page 12: FTP Materi.pdf

//method untuk melakukan download ke server private void buttonDownload_Click(object sender, EventArgs e) { //mendapatkan nama file saveFileDialog1.FileName = lbFiles.Items[lbFiles.SelectedIndex].ToString(); //memunculkan savedialog untuk menentukan lokasi simpan if (saveFileDialog1.ShowDialog() == DialogResult.OK) { //mempersiapkan variabel untuk download byte[] buff = new byte[bufferFile]; int readCount; string cmd; //mendapatkan nama file dari lbfile string filename = lbFiles.Items[lbFiles.SelectedIndex].ToString(); //membuat passive connection NetworkStream passiveConnection = createPassiveConnection(); cmd = "RETR " + filename + "\r\n"; byte[] szData = Encoding.ASCII.GetBytes(cmd.ToCharArray()); //FileInfo fileParse = new FileInfo(getPath(LocalPath) + "\\" + filename); FileStream OutStream = new FileStream(saveFileDialog1.FileName, FileMode.Append); passiveConnection = createPassiveConnection(); //kirimkan perintah RETR untuk download NetStrm.Write(szData, 0, szData.Length); //frmPrgTrans TransferProgress = new frmPrgTrans(); //TransferProgress.Show(); readCount = passiveConnection.Read(buff, 0, bufferFile); long loadsize = 0; while (readCount > 0) { loadsize += readCount; //TransferProgress.setProgress((int)(loadsize * 100 / filesize) , filename); OutStream.Write(buff, 0, readCount); readCount = passiveConnection.Read(buff, 0, bufferFile); //bgwDownload.ReportProgress((int)(loadsize * 100 / filesize)); } passiveConnection.Close(); OutStream.Close(); MessageBox.Show("File Downloaded"); richTextBoxStatus.AppendText("\r\nRcvd:" + new StreamReader(NetStrm).ReadLine()); } } private void FormClient_FormClosed(object sender, FormClosedEventArgs e) { frmlogin.Visible = true; //frmlogin.Close(); }