星期五, 6月 10, 2005

SOCKS

SOCKS是一個代理伺服器,幫助內部的PC向外部的伺服器要求資料,並且將取的資料轉交給內部PC。這樣內部PC可以完全不和外部接觸。而達到firewall的功能。

內部PC向SOCKS Server提出需求,請求到外部Server XXX取得YYY資料。
SOCKS Server取得後,將資料傳會PC。

和NAT不一樣的是,NAT將內部PC的封包modify後送出,將收回的封包modify後送回PC。

Socksification:(讓你的application有使用Socks Proxy的能力)

SOCKSv5 reference Implementation中針對所有BSD的function都實作了一份有SOCKSv5能力的s類名函式,將一個application改成使用 SOCKSv5,只要在source code中加入一個#include ,然後link到SOCKSv5 Reference Implementation。

SOCKS firiendly guidlines:

1.讓syslog紀錄的program名稱正確(告訴SOCKS你真正的名子)

在main開始的地方,加入:
SOCKSinit(argv[0]);
這樣SOCKS library在client端的syslog中就會顯示真正的program名,而不會是SOCKS library的名子

2.將相關的function rename成SOCKS library提供的類同名函式

SOCKSv4:

compile 時加入以下define:
-Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dgetpeername=Rgetpeername -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect

SOCKSv5:

source code中要#include socks.h,然後在compile command加入
-DSOCKS

3.link適當的SOCKS library

在makefile,或是compile command中的link option加入socks library的path
並且指定link socks library

SOCKS4:

-L -lsocks

SOCKS5:

-L -lsocks5

範例:假設socks5 library path是 /usr/gjh/socks5

原來的build command:

% gcc -o foo foo.c

改成socks5的command:

% gcc -include /usr/gjh/socks5/include/socks.h -DSOCKS -L/usr/gjh/socks5/lib -lsocks5 -o foo foo.c


另外一種方法(沒有source code時)

利用系統share library的功能,執行runsocks這個script,這個script會load
socks5的share library,讓application呼叫到這個socks5 library的sock function,
而不會使用原來系統標準的sock library

沒有留言:

張貼留言