如何將SocksCap64整合到你的軟件中去?(通過Socket控制SocksCap64軟件的一些行為?)

此舉主要為某些希望將SocksCap64(以下簡稱SC64)整合到自己軟件中去的開發者而設置.

此整合行为仅限于免费或学习使用，请务用于商业行为。如有商业需求请联系作者。同时请务必尊守当地的法律法规，若因此所产生的法律问题 与本软件无关。

一，命令行方式：
命令行参数说明, SocksCap64 2.6版本开始支持命令行方式启动参数, 相关说明如下（参数大小写敏感）: 

-i 指定代理IP, 如: -i192.168.1.1 （注：-i后边的代理参数之间无空格）
-p 指定代理端口, 如: -p1080
-t 指定代理类型, 如: -t5
type: 
3: http
4: socks 4/4a
5: socks 5
6: shadwosocks

-u acount for proxy server
-s password for proxy server
-c encryption for shadowsocks
--protocol for SSR
--protoparam for ssr
--obfs for ssr
--obfsparam for ssr

( 注意: 你不能在命令行中同时为不同程序指定不同代理, 并且同时启动它们, 例如你为Google Chrome设置了代理192.168.1.2并启动了它, 然后你为IE通过命令行中设置了代理: 192.168.1.3并运行它那么IE的代理将会复盖之前Google Chrome的代理)
-r 指定要运行的程序文件的完整路径,如果含有空格必须将文件以引用包围,
如: -r”C:\Program Files (x86)\Google\Chrome\Application\chrome.exe”
-d 指定要运行的程序文件的工作目录, 如未指定则直接取需要运行的程序文件所在的目录, 如果含有空格必须将文件以引用包围,
如: -d”C:\Program Files (x86)\Google\Chrome\Application\”
-a 指定要传给运行的程序的参数, 未指定则表示无.
如: -att
-n 指定程序域名解析的方式,如未指定默认为DNS_REMOTE(2)
如: -n2
local: 0
local then remote: 1
remote: 2
-w 指定窗口显示方式 hide/show. -whide 隐藏窗口启动, -wshow 显示窗口启动. 如果参数中指定了一个程序文件(-r参数), 但又没有指定窗口显示方式的话,默认是隐藏窗口的(-whide)
如: -whide 启动sc64时隐藏主窗口.
-e -esilent 是否以静默方式启动, 安静方式启动后, 不会弹出一些提示, 例如: 提示导入浏览器等. 例如: -esilent 以安静方式启动.
--quit 退出之前启动的进程. 如果启动时加了这个参数, 会查找之前启动的进程向它发送退出消息, 之后自己退出, 如果是首次启动的话, 找不到之前的进程,那自己直接退出.
--hideicon 隐藏托盘图标

二：通过SOCKET交互，此举需要你有一定的编程能力

SC64提供了一個本地的NS解析服務, 同時可以處理用戶發出一些控制行為, 此服務通常監聽在29810端口, 但某些情況下也會更改(例如此端口已提前被占用). 穩妥的做法是找到SC64的安裝目錄下的config\ns.ini文件, 裏邊記錄了當前SC64的NS服務正在工作的端口, 如下:
[basic]
ip=127.0.0.1
port=29810
searchport=1

port即是當前工作端口. 下邊將正確的開發流程加下說明.

1, 打開注冊表HKEY_CURRENT_USER\Software\Sockscap64
    Install_Dir 項指明了SC64當前的安裝目錄.

2, 讀取Install_Dir\config\ns.ini文件. 獲得SC64當前NS工作在哪個端口.

3, 創建Socket向第2步中取得到的端口發送控制指令. 相關控制指令在如下說明.
    與ns通信的數據包格式為(ns的回複信息也是這樣的格式): cmd (1 bytes) + length of packet body(4 bytes) + packet body
    length of packet body指packet body長度.
    packet body是采用“\r\n”区隔的多行文本，采用Utf8編碼, 以0x00结束( 发送指令时务必将0x00结束符发送过来)。 
    ns的指令回複中的packet body也是"\r\n"分隔的多行文本, 僅2行, 第一行是錯誤碼, 0表示成功, 1表示一般性錯誤,其它值為具體的錯誤編碼.

    a) 显示/隐藏SC64主窗口
       cmd: 9
       line 1: on: 顯示主窗體. off: 隱藏主窗體.

    b) 设置当前代理
       cmd: 10
       Line 1	代理服务器地址，如 1.2.3.4
       Line 2	代理服务器端口，如1080
       Line 3	账号，此行如果为空则表示不需要账号
       Line 4	密码，此行如果为空则表示不需要密码
       Line 5	3是HTTP,4表示是socks4/4a,5表示是socks5，6是Shadowsocks
       Line 6	加密方式,只用在ss代理中, 可选的值是: aes-256-cfb, aes-192-cfb,aes-128-cfb,rc4-md5,rc4,salsa20,chacha20. socks代理填空，但是这一行是必须要的
       Line 7	ssr: Protocol
	   Line 8	ssr: Protocol's param
	   Line 9	ssr: Obfs
	   Line 10	ssr: Obfs's param
	   
     c) 启用/禁用代理功能 ( 即: SC64中的臨時禁用SC64的功能)
       cmd: 11
       line 1: on：启用代理功能；off：禁用代理功能

     d) 启动应用程序      
       cmd: 12
       Line 1	程序命令行
       Line 2	工作目录
       Line 3	启动参数

     e)	活动探测( SC64當前是否仍在工作中, 是否卡死無響應)
       cmd: 13
       無packet body, length of packet body給0就行.

     f)	设置代理规则
	cmd:14
       第一行	代理指令
       set:  设置代理规则
       clear: 清除所有代理规则　（　此指令只需一行　）

       第二行	目标Hosts规则. 规则可以是:
       一个IP地址, 如: 127.0.0.1
       一个IP段,如: 192.168.1.1-192.168.1.100
       如果为*号则表示匹配所有.
       可以是多个IP或者多个IP段, 以;(分号)隔开. 例如:
       192.168.1.1;10.0.0.1;139.12.10.1-139.12.10.100

       第三行	目标PORTS规则, 规则可以是:
       一个端口,如: 1080
       一个端口段, 如: 8000-8010
       如果为*号则表示匹配所有.

       第四行	规则行为
       proxy:  通过代理请求网络
       direct: 直连
       block: 阻止访问网络
	   
	   注意:  ip 与 port 是 AND 的关系. 例如:  同时指定了 IP为: 192.168.1.1 端口为: 80 则表示匹配到192.168.1.1:80的访问才执行规则.

       注意: 必须先设置好规则, 再启动目标程序. 目标程序启动后中途改变规则不会实现生效. 

       因此, 如果需要设置为仅允许某些IP通过代理, 其它IP均不通过代理请求的话,可以发送指令如下 ( 例子中仅允许133.155.1.10-133.155.1.15 通过代理请求网络 , 其它所有请求均直连 ):
       clear
       set\r\n*\r\n*\r\ndirect
       set\r\n133.155.1.10-133.155.1.15\r\n*\r\nproxy
	 g) 退出程序
	   無packet body. 也不會有回複. SC64收到此指令直接退出.

      g)             附加到进程
                        cmd: 16
        第一行： 进程名，例如：chrome.exe
        返回代码1（成功）的时候，描述信息中会说明有多少个进程被成功附加了(因为有同名进程)

      h)            添加过滤进程（不被代理）
                       cmd: 17
        第一行： 进程名，例如：chrome.exe,firefox.exe
                          多个进程以逗号分隔
 
       i)             移除过滤进程
                       cmd: 18
         第一行： 进程名，例如：chrome.exe,firefox.exe
                          多个进程以逗号分隔