內部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
SOCKS5:
-L
範例:假設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
沒有留言:
張貼留言