Log in

View Full Version : ขอปรึกษาการเรื่องเขียนโปรแกรมของผมหน่อยครับ



jaynarol
28-03-2009, 06:58 AM
ผมอยากเขียนโปรแกรมที่มีหน้าที่ในการ รับ packet จากเครื่องuserที่ส่งมา จาก port ที่ตั้งไว้

แล้วส่งต่อไปให้อีกเครื่องนึงที่ผมได้เซ็ทไว้

โดยผมสามารถกำหนด username/password ของ user ได้

ไม่ทราบว่าความสามารถแค่นี้ต้องใช้ภาษาอะไรเขียนหรอครับ

แล้วใครพอมี หลักการ/source code/คำแนะนำ บอกผมมั่งนะครับ

พอดีอยากลองเขียนเอง

ลืมบอกไปครับ ผมเขียน C/C++/Java/PHP ได้อย่างคล่องและภาษาอื่นๆได้นิดหน่อยครับ

^^

Edkung_
28-03-2009, 08:44 AM
ไม่รู้ว่าผมเข้าใจถูกรึเปล่านะ ลองดูที่นี่ดู
http://www.codeproject.com/KB/IP/PortForward.aspx

แต่ภาษาที่แนะนำจริงๆ คงจะเป็น java จะดีกว่า (กรณีที่ ไม่ได้เขียน win32 c++ คล่อง)

jaynarol
28-03-2009, 09:46 AM
ขอบคุณครับ

แต่ผมอยากไดที่สามารถกำหนด username/pass ของ user ได้อะครับ

แล้วที่สำคัญคือเครื่องที่ผมจะส่งไปก็ user/pass ด้วยครับ

ดังนั้นโปรแกรมขอผมต้องส่ง user/pass เพื่อให้อีกเครื่องยอมรับด้วยครับ

ขอยคุณนะครับ

jaynarol
30-03-2009, 10:20 AM
แง่ว..

ไม่มีใครทราบเลยหรอครับ

เอาเป็นภาษาอื่นก็ได้ครับ อย่าง python/perl

หลักการมันคล้ายๆกับ proxy อะครับแต่อันนี้มันแค่เป็นตัวกลางในการเชื่อมต่อเฉยๆ

ไม่มีเก็บแคชไว้อะครับ

T-T

asylu3
30-03-2009, 02:46 PM
ฟังดูจาก requirement แล้วค่อนข้างงง ว่าต้องการทำอะไร
ทำไมถึงต้องเขียนเอง หากต้องการทำ proxy โปรแกรม squid บน web server ไม่สามารถ config ให้ใช้ได้หรือ?
ต้องการบรรลุเป้าหมายอะไร? ทำไปทำไม ? ช่วยเล่า background ให้ทราบหน่อย เผื่อบางที่สิ่งที่คุณอยากทำมันมี โปรแกรมที่พัฒนาไว้อยู่แล้ว
อธิบายไม่ละเอียดก็ไม่สามารถค้นหาข้อมูลหรือคำตอบให้ได้

jaynarol
30-03-2009, 05:52 PM
คือต่อจากกระทู้ที่แล้วอะครับ(เว็บผมโดยแฮกระบบทดลอง)

ซึ่งผมใช้ Windows ทำให้ความสามารถ squid มันไม่เต็ม 100 % อะครับ

ผมจึงลองอยากเขียนขึ้นมาเองดูเพราะเท่าที่ดูมันก็ไม่น่าจะยากมากนัก
ติดแค่ผมไม่เคยเขียนโปรแกรมแนวนี้เลยทำให้เริ่มไม่ถูกอะครับ

โปรแกรมที่ผมคิดไว้คือ

มีหน้าที่ในการรับ packet จากเครื่อง user แล้วส่งต่อให้อีกเครื่องนึง(เครื่องนี้เป็นเครื่องกลาง)
สามารถตรวจเช็ค user/pass ของ user ที่เข้ามาได้
สามารถรองรับได้หลาย port และสามารถส่งต่อไปได้หลายเครื่อง เช่น
- user A ส่งแพคเก็ตมาหาเครื่องผมโดยใช้ port 9999 เครื่องผมก็จะส่งตอไปยังเครื่อง ก.
- user B ส่งแพคเก็ตมาหาเครื่องผมโดยใช้ port 9900 เครื่องผมก็จะส่งตอไปยังเครื่อง ข.
- user C ส่งแพคเก็ตมาหาเครื่องผมโดยใช้ port 9600 เครื่องผมก็จะส่งตอไปยังเครื่อง ค.
โดยใช้ port เป็นตัวแปรเพื่อควบคุมการส่งต่อไปยังเครื่องอื่นๆอะครับ

อันนี้เป็นหน้าที่หลักๆนะครับส่วนอื่นๆผมก็อยากให้
- สามารถ ตั้งเวลาหมดอายุของ username ได้
- จำกัดแบนวิทของ user ได้(แยกกันจากuser อื่นอย่างอิสระ)
- จำกัดจำนวนที่เชื่อต่อของ user ได้(แยกกันจากuser อื่นอย่างอิสระ)

ประมาณนี้อะครับโปรแกรมที่ผมคิดเอาไว้
เข้าใจรึยังครับว่าทำไมผมถึงอยากเขียนเอง

เพราะผมอยากคอลโทลได้ตามใจนึกอะครับ

ขอบคุณมากๆครับ

asylu3
30-03-2009, 06:13 PM
แล้ว service ที่จะเปิดให้ทำงานที่ port นั้นจะเป็น protocol อะไรครับ FTP, HTTP, SSH? หรือเป็นการส่ง หรือรับข้อมูลประเภทใด

jaynarol
30-03-2009, 06:32 PM
ตอนที่ใช้ squid ในการควบคุมรู้สึกจะรับ packet มาในแบบ HTTPS นะครับ
เพราะเครื่อง user จะส่งมาแบบ HTTPS จากโปรแกรม Proxifier ตามรูปเลยครับ และสามารรถส่ง password มาได้เลยด้วย


http://pic.citec.us/out.php/i13725_test.gif


ส่วนโปรแกรมที่ผมจะเขียนก็ต้องรับแบบ HTTPS เพื่อที่จะรับ packet ของ user ได้อะครับ
และก็ต้องส่งแบบ HTTPS ด้วยครับเพราะเครื่อง ก.-ข.-ค. ของผมนั้นใช้ squid ในการรับข้อมูลครับ

แต่จริงๆผมก็ไม่ค่อยมีความรู้มากนักอะครับ

วานผู้ที่พอมีความรู้แนะนำด้วยก็ดีครับ

ขอบคุณครับ^^

ลืมบอกไปครับ packet ที่ส่งแต่ละครั้งนั้นเล็กมากๆครับ

อยู่ที่ประมาณ 50-120 byte ครับ

และการส่งก็เป็นแบบครั้งเดียวจบครับ

Gen0TypE
31-03-2009, 12:40 PM
พอดีผมไม่เคยใช้ squid อ่ะนะ เลยไม่รู้ว่า squid ทำแบบที่ท่าน jaynarol ต้องการได้รึเปล่า
แต่ถ้าทำไม่ได้ ผมว่าน่าจะลง squid เป็น 3 ตัวไปเลย แล้วแยกไฟล์ config กัน
ให้แต่ละตัวรับ packet ของแต่ละ port (เหมือนกับว่ามี squid 3 ตัว bind ไว้ 3 port)

หรือถ้าอยากเขียนเองก็ลองไปหา source code พวก proxy มาแกะ แล้วแก้ให้เป็นตามที่ต้องการครับ

jaynarol
31-03-2009, 04:24 PM
อะครับ หนึ่งในวิธีที่ผมเคยคิดก็คือลง squid 3 ตัว แต่ปัญหาคือผมลงไม่ได้อะครับเป็นเพราะไม่เป็นเองรึป่าวไม่รู้

พอผมลงแล้วทำการ start service มันก็จะ error แจ้งว่ามี service ตัวนี้ทำงานอยู่แล้วอะครับ

ซึ่งผมคิดอยู่แล้วว่ามันน่าจะลงได้แค่เปลี่ยนชื่อ service ใหม่

จึงรบกวนท่านที่มีความรู้เอาไฟล์ที่ผมใช้ติดตั้งไปดูทีครับ code ที่ติดตั้งเป็น bat ผมจึงคิดว่าน่าจะแกะไม่ยาก

จุดประสงค์คือให้ทำงานแยกกันคนละ service อะครับจะได้ลง 3 squid ได้


http://file.citec.us/download.php?id=566D736C

jaynarol
01-04-2009, 09:54 AM
ตอนนี้หลักการ จุดประสงค์ และทุกอย่างผมบอกไปหมดแล้วนะครับ

ถ้าไม่ได้จริงๆผมก็คงต้องถอดใจและ

T-T

Thegodth
02-05-2009, 12:45 AM
ลองอ่านๆ ดูจาก requirement เบื้องต้น รู้สึกแปลกๆ นิดหน่อย

ผมมีความรู้สึกว่าเหมือนจะทำการดักจับ package คล้ายๆ ทำ sniffer เพียงแต่ว่าคุณไม่ได้ระบุว่าต้องมีการดักจับได้ด้วย
(อันนี้ไม่รู้นะ แค่คิดเฉยๆ เพราะบอกว่าว่า - user A ส่งแพคเก็ตมาหาเครื่องผมโดยใช้ port 9999 เครื่องผมก็จะส่งตอไปยังเครื่อง ก. -)

อันนี้ความคิดผมนะ

อาจต้องมี server 2-3 ตัว (เพราะคุณบอกว่าใช้ squid ด้วย)

server 1 = ทำหน้าที่คล้ายๆ firewall gateway ลองศึกษาเรื่อง iptables firewall บน linux ดูครับ หลักการเขียน firewall rules บน iptables มันสามารถ forward package จาก ip ที่เข้ามา หรือ eth ที่เข้ามา โดย fix port ให้ drop หรือ โยนไปที่อื่นได้

server 2 = squid proxy ไว้ caching และ ทำ authenticate ซึ่งตัว squid เอง config มันสามารถ set ให้ทำการ authen กับ server ที่ทำหน้าที่เก็บ authen user ได้

server 3 = (อันนี้ options เสริม) ไว้ทำเป็น server authenticate เก็บแต่ username + passwd ให้ squid authen user กะเครื่องนี้

dojo
01-04-2010, 12:43 AM
5555555555555555555

โจทนี้ท้าทายดีนะครับ

ผมคิด่วาผมทำได้น่ะครับ แต่เรื่อง user password ผมไม่แน่ใจ

แพคเกตที่คุณกล่าวมาเนี่ย คือส่งภายใต้โปรโตรคอล TCP/IP ใช่ไหมครับ

เอ่อแล้ว ขอถามอีกนิดครับ แพคเกตที่คุณว่าเนี่ย หมายถึง คุณจะส่งไฟล์ใช่ไหมครับ

ส่งไฟล์ แล้วให้เซิฟเวอร์ส่งต่อตามพอร์ตที่ต้องการใช่ไหมครับ

nond@live.com เมลย์ผมคับ ติดต่อได้