Skip to content

codedbypu/secure-lan-file-transfer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🔐 Secure LAN File Transfer System

โปรเจคนี้ผมเริ่มต้นจากการทำ Reverse Engineering โค้ดต้นแบบที่สร้างโดย AI เพื่อใช้ศึกษาเจาะลึกด้าน Network Programming และ Security โดยผมได้นำมารื้อโครงสร้าง ปรับแก้และทดสอบการทำงานในวง LAN จริง จนเข้าใจสถาปัตยกรรม Socket, I/O Streams และการทำ Data Encryption มากขึ้น

📌 Concept

ระบบส่งไฟล์ระหว่างเครื่องคอมพิวเตอร์ (Peer-to-Peer) ภายในเครือข่าย (LAN) ที่พัฒนาด้วย Java โดยใช้โปรโตคอล TCP/IP

โปรเจคนี้มุ่งเน้นไปที่:

  • ความสมบูรณ์ของข้อมูล (Data Integrity)
  • ความปลอดภัยของข้อมูลระหว่างการส่ง (Basic Data Protection)
  • การออกแบบโปรโตคอลสื่อสารแบบกำหนดเอง (Custom Protocol Design)

โดยมีการป้องกันการแก้ไขข้อมูลระหว่างทาง (File Tampering) และลดความเสี่ยงจากการถูกดักจับข้อมูลในระดับพื้นฐาน


🏗️ Architecture & Protocol Design

ระบบทำงานแบบ Client-Server Architecture ผ่าน Custom Protocol ที่ออกแบบมาเพื่อการส่งไฟล์โดยเฉพาะ:

🔹 Client (Sender)

  • อ่านไฟล์จากเครื่อง
  • แบ่งข้อมูลเป็นส่วนๆ (Chunking)
  • เข้ารหัส(Encrypt) ข้อมูลก่อนส่ง
  • ส่งข้อมูลผ่าน TCP Socket แบบต่อเนื่อง (Streaming)

🔹 Server (Receiver)

  • รอรับการเชื่อมต่อผ่าน Port ที่กำหนด
  • รับและถอดรหัสข้อมูล(Decrypt)
  • เขียนไฟล์ลงใน Disk ปลายทาง
  • ตรวจสอบความถูกต้องของข้อมูลหลังการรับเสร็จสิ้น

🔹 Handshake & Verification

  • มีการแลกเปลี่ยนยืนยันขนาดไฟล์ก่อนเริ่มส่ง
  • ตรวจสอบ Checksum หลังส่งเสร็จ เพื่อยืนยัน Data Integrity ว่าข้อมูลรับมาครบจริงๆ

✨ Key Features & Security Measures

  • Reliable File Transfer: ใช้ TCP ที่รับประกันการส่งข้อมูลครบถ้วนและเรียงลำดับถูกต้อง
  • Data Encryption (Basic Security): มีการเข้ารหัสข้อมูล (Encryption) ก่อนส่งลง Network ป้องกันการถูกดักอ่านข้อมูล (Packet Sniffing)
  • Data Integrity (Checksum/Validation): ตรวจสอบความถูกต้องของไฟล์ปลายทางเทียบกับต้นทาง เพื่อให้มั่นใจว่าไฟล์ไม่เสียหายหรือถูกดัดแปลง
  • Stream Buffer Management: ใช้ Buffered I/O เพื่อลดการใช้หน่วยความจำและรองรับไฟล์ขนาดใหญ่
  • Real-time Progress: แสดงสถานะและความคืบหน้าของการรับ-ส่งไฟล์ผ่าน Console

🛠️ Tech Stack

  • Language: Java (JDK)
  • Networking: java.net.Socket, java.net.ServerSocket (TCP/IP)
  • File Handling: java.io (FileInputStream, FileOutputStream, BufferedStreams)
  • Security: Java Cryptography Architecture (JCA)
    • Symmetric Encryption (เช่น AES)
    • Hashing / MessageDigest สำหรับ Checksum

🚀 How to Run

การทดสอบระบบจำเป็นต้องมีคอมพิวเตอร์ 2 เครื่องที่อยู่ในวง LAN เดียวกัน (หรือรันบน localhost ผ่านเครื่องเดียวเปิด 2 Terminal)

1. ฝั่ง Server (เครื่องรับไฟล์)

เปิด Terminal และรันคำสั่งต่อไปนี้เพื่อรอรับการเชื่อมต่อ:

javac Server.java
java Server <PORT>

ตัวอย่าง:

java Server 8080

2. ฝั่ง Client (เครื่องส่งไฟล์)

เปิด Terminal และส่งคำสั่งพร้อมแนบไฟล์เป้าหมาย:

javac Client.java
java Client <SERVER_IP> <PORT> <FILE_PATH>

ตัวอย่าง:

java Client 192.168.1.10 8080 ./document.pdf

🧠 What I Learned

จากการแกะโค้ดและพัฒนาโปรเจคนี้ ผมได้เรียนรู้ทักษะที่นำไปใช้งานจริงได้ดังนี้:

  • Network Programming: เข้าใจการใช้งาน TCP Socket (Bind, Listen, Accept, Connect) มากขึ้น
  • Data Stream Processing: การจัดการ I/O Streams ใน Java และการทำ Buffer เพื่อจัดการไฟล์ขนาดใหญ่
  • Applied Cryptography: การประยุกต์ใช้อัลกอริทึมเข้ารหัส (Encryption) และการแฮช (Hashing/Checksum) เพื่อความปลอดภัยของข้อมูล ผมคิดว่าส่วนจะได้นำไปใช้ในอีกหลายๆโปรเจคในอนาคตเลย

🌱 Reflection

โปรเจคนี้เริ่มต้นจากการใช้งานโปรแกรม AltSendme ซึ่งเป็นโปรแกรมส่งไฟล์แบบ peer-to-peer แล้วเกิดสงสัยการทำงานภายในของโปรแกรม เลยถามแนวคิดและ Architecture ของโปรแกรมจาก AI พอศึกษาได้ระดับนึงเลยลองเขียนโปรเจคนี้ขึ้นมาเพื่อทดลองทำโปรแกรมเล็กๆขึ้นมา เพื่อเสริมความเข้าใจตัวเอง

About

ระบบส่งไฟล์ภายในเครือข่าย LAN ที่พัฒนาด้วย Java โดยออกแบบ Custom Protocol บน TCP/IP พร้อมกลไกเข้ารหัสข้อมูลและตรวจสอบความถูกต้องของไฟล์ เพื่อศึกษา Network Programming และ Data Security

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages