由于需要使用socks代理,查看了nodejs的各种socks库,最终的结论是socks库是其中最完善的,而socks-proxy-agent是以其为基础的封装,可以直接和http模块对接。

不过在尝试后发现socks-proxy-agent建立的连接无法使用认证功能,而直接使用socks库是可以的。因此查看了其源码。

  var options = {
proxy: {
ipaddress: proxy.host,
port: proxy.port,
type: proxy.version
},
target: {
port: opts.port
},
command: 'connect'
}; if (proxy.lookup) {
// client-side DNS resolution for "4" and "5" socks proxy versions
dns.lookup(opts.host, onlookup);
} else {
// proxy hostname DNS resolution for "4a" and "5h" socks proxy servers
options.target.host = opts.host;
SocksClient.createConnection(options, onhostconnect);
}
}

可见options只选用了地址,端口,类型,等少数参数,认证参数不在其中。

按照socks的说明

socks5的认证参数为:

options.proxy.authentication={"username":string,"password":string};

socks4的用户id为://socks4不支持密码。

options.proxy.userid=string;

于是添加了一段

  if (proxy.auth){
var auth=proxy.auth.split(":");
var optp=options.proxy;
optp.authentication={"username":auth[0],"password":auth[1]};
optp.userid=auth[0];
}

连接socks5成功了,连接socks4失败,显示:"Error: Socket Closed",这样的效果和直接使用socks相同,所以显然问题在于socks库本身(测试的服务器是ccproxy)。

目标已经达到了,收工。

修改已经提交至github:https://github.com/hjiayz/node-socks-proxy-agent

给socks-proxy-agent增加认证的更多相关文章

  1. 使用netty构建一个socks proxy

    使用netty构建一个socks proxy   最近在做的项目,需要自己搭建一个socks代理.netty4.0附带了一个socks代理的样例,但是3.x就没有这个东西了,碰巧使用的又是3.7,就只 ...

  2. How do I use SOCKS proxy in delphi?

    TCP====== For Indy 8.0 In Delphi, do the following: IdTCPClient1.SocksInfo.Host := [the DNS name of ...

  3. Setup SS5 Socks Proxy

    Install and configure ss5 socks proxy with simple authentication SS5 is a high performance socks pro ...

  4. 〖Linux〗转换Socks Proxy为Http Proxy

    使用工具,privoxy,官网: http://www.privoxy.org/ socks5 proxy设定方法: autossh -CgNfD  0.0.0.0:1080 vps-lxb sock ...

  5. fitnesse页面增加认证

    一.增加用户认证1. 只增加一个认证用户:java -jar fitnesse.jar -a username:password 2. 增加多个认证用户(明文密码)    2.1 新建一个passwo ...

  6. zabbix4.4 (server,proxy,agent)安装部署实战

    一. 部署架构图 二. 安装环境及版本信息 操作系统:centos7 zabbix版本: 4.4 mysql: 5.7.28 三.zabbix server安装(192.168.182.132) rp ...

  7. 【proxy agent资料】

    参考资料: GoAgent使用方法, 2015年最新FQ方法总结:http://www.bianlei.com/we-wanna-see-the-world/ 配置Android支持GAE Proxy ...

  8. nginx 增加认证

    1.检查工具是否安装,如果未安装则使用yum安装 #htpasswd 有以上输出表示已经安装,如果没有按装,使用如下命令安装: #yum -y install httpd-tools 2.htpass ...

  9. springCloud eureka服务治理集群增加安全认证

    做为SpringCloud Netflix服务套件中的一部分,springCloud eureka基于Netflix Eureka做了二次封装,默认提供WEB管理页面及服务治理. 为了确保在生产环境中 ...

随机推荐

  1. T-SQL 基础 2

    运行结果: while 循环 运行结果: 运行结果 : if 判断语句 计算 1到100的基数 运行结果 1到100的偶数 运行结果 局部变量前缀是 @ 全局变量(包括系统变量) 前缀是 @@

  2. html5中event获取data和class

    获取data和class var tare=$(e.relatedTarget).data("id");var tar=event.target;console.log(tare) ...

  3. Android学习笔记_75_Andorid控件样式汇总

    <!-- 设置activity为透明 --> <style name="translucent"> <item name="android: ...

  4. SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql

    转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/springboot3-JdbcTemplates-Mysql/ 本文出 ...

  5. Python 学习笔记(三)数字

    Python 数字 int 整型  是正或负整数  2 long 长整型  整数最后是一个大写或小写的L   2L float  浮点型 由整数部分和小数部分组成   2.0 complex 复数 小 ...

  6. Redis工具之Jedis

    //jedis的连接池 public void test1(){ //创建连接池配置对象 JedisPoolConfig poolConfig = new JedisPoolConfig(); poo ...

  7. fabricjs 的用途

    使用html5 的canvas画板做一些图片旋转,拖动,放大,缩小和合成图片的功能,有没有一个集成好的组件库呢?答案肯定是有的,而且还不止我前面提到的功能,下面介绍一下我使用的fabricjs. 官网 ...

  8. chromium之tracked

    //------------------------------------------------------------------------------ // Tracked is the b ...

  9. Redis安装与简单配置

    一.Redis介绍 1.redis是什么? remote dIctionary server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis提 ...

  10. es6几个新增语法的使用----数组

    //数组的累加方法 let arr=[1,2,3]; let sum=arr.reduce((prev,cur)=>{ return prev+cur; }) console.log(sum)/ ...