如何在Linux下配置socks5代理

如何在Linux下配置socks5代理,第1张

[root@localhost ss5-3.8.9]# yum install pam-devel openldap-devel openssl-devel

[root@localhost socket5]# wget http://sourceforge.net/projects/ss5/files/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz/download

[root@localhost socket5]# tar -zxvf ss5-3.8.9-8.tar.gz

[root@localhost socket5]# cd ss5-3.8.9

[root@localhost ss5-3.8.9]# ./configure

[root@localhost ss5-3.8.9]# make

[root@localhost ss5-3.8.9]# make install

编辑配置文件

[root@localhost ss5-3.8.9]# vi /etc/opt/ss5/ss5.conf

插入

auth0.0.0.0/0 - u

permit u0.0.0.0/0 - 0.0.0.0/0 - - - - -

创建用户名密码

[root@localhost ss5-3.8.9]# vi /etc/opt/ss5/ss5.passwd

一行一个用户名密码,空格隔开

[root@localhost ss5-3.8.9]# chmod +x /etc/init.d/ss5

[root@localhost ss5-3.8.9]# /etc/init.d/ss5 start

[root@localhost ss5-3.8.9]# netstat -nap|grep ss5

tcp0 0 0.0.0.0:10800.0.0.0:* LISTEN 28870/ss5

############################

如果需要限制访问某些ip地址可以增加

permit -0.0.0.0/0 - 1.1.1.1 80 http- - -

permit -0.0.0.0/0 - 2.2.2.2 80 http- - -

规则是按顺序向下匹配,匹配到则通过,否则拒绝

也可以使用域名,这样就只能访问这个域名,但是感觉不好用,子页面无法查看,把域名对应的ip加入后,就可以正常访问网站了

permit -0.0.0.0/0 - www.abc.com 80 http- - -

Linux socket编程的心跳机制总结

我写这篇文章的目的是想总结一下心跳机制的使用,因为最近两个项目的TCP通信中都使用了这个方法,感觉比较经典,所以拿出来与大家共享。

什么是心跳机制

心跳机制就是当客户端与服务端建立连接后,每隔几分钟发送一个固定消息给服务端,服务端收到后回复一个固定消息给客户端,如果服务端几分钟内没有收到客户端消息,则视客户端断开。发送方可以是客户端和服务端,看具体需求。

为什么要使用

我们都知道在TCP这种长连接情况下下,有可能有一大段时间是没有数据往来的,即处于空闲状态。理论上说,这个连接是一直保持连接的,但是在实际应用中,如果中间节点出现什么故障是难以预测的。更可怕的是,有的节点会自动把一定时间之内没有数据交互的连接切断。所以,需要我们利用心跳机制,来维持长连接,保活通信。

实现方法

应用层: 由应用程序自己每隔一定时间向客户/服务端发送一个短小的数据包,然后启动一个线程,在线程中不断检测客户端的回应, 如果在一定时间内没有收到客户/服务端的回应,即认为客户/服务端已经掉线,连接不可用。

设置SO_KEEPALIVE套接字选项:在TCP通信中,存在heartbeat机制。其实就是TCP的选项。当服务/客户端,一方开启KeepAlive功能后,就会自动在规定时间内向对方发送心跳包, 而另一方在收到心跳包后就会自动回复,以告诉对方我仍然在线。

注意:因为开启KeepAlive功能需要消耗额外的宽带和流量,所以TCP协议层默认并不默认开启KeepAlive。KeepAlive超时需要7,200,000 MilliSeconds, 即2小时,探测次数为5次。对于很多应用程序来说,空闲时间太长。因此,我们可以手工开启KeepAlive功能并设置合理的KeepAlive参数。

我的实现

这里具体介绍设置SO_KEEPALIVE套接字选项这个方法。

SO_KEEPALIVE的三个参数:

tcp_keepalive_intvl:探测发包间隔为intvl。

tcp_keepalive_idle:连接在idle时间内没有任何数据往来,则进行此TCP层的探测。

tcp_keepalive_cnt:尝试探测的次数。

setsockopt()函数介绍

用法:设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。

函数原型:

#include <sys/types.h>

#include <sys/socket.h>

int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)

参数:

sock:将要被设置或者获取选项的套接字。

level:选项所在的协议层。

optname:需要访问的选项名。

optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。

optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度。

返回说明:

成功执行时,返回0。失败返回-1,errno被设为以下的某个值

EBADF:sock不是有效的文件描述词

EFAULT:optval指向的内存并非有效的进程空间

EINVAL:在调用setsockopt()时,optlen无效

ENOPROTOOPT:指定的协议层不能识别选项

ENOTSOCK:sock描述的不是套接字123456789101112131415161718

具体代码

int heartbeat(int fd)

{

int alive,error,idle,cnt,intv

/*

* open keepalive on fd

*/

Restart:

alive = 1//set keepalive open

ret=setsockopt(fd,SOL_SOCKET,SO_KEEPALIVE,&alive,sizeof(alive))

if(ret <0)

{

DEBUG("set socket option error.\n")

goto Restart

}

/*

* 60S without data,send heartbeat package

*/

idle = 60

ret = setsockopt(fd,SOL_TCP,TCP_KEEPIDLE,&idle,sizeof(idle))

if(ret <0)

{

DEBUG("set keepalive idle error.\n")

return -1

}

/*

* without any respond,3m later resend package

*/

intv = 180

ret = setsockopt(fd,SOL_TCP,TCP_KEEPINTVL,&intv,sizeof(intv))

if(ret <0)

{

DEBUG("set keepalive intv error.\n")

return -2

}

/*

* send 5 times,without any response,mean connect lose

*/

cnt = 5

ret = setsockopt(fd,SOL_TCP,TCP_KEEPCNT,&cnt,sizeof(cnt))

if(ret <0)

{

DEBUG("set keepalive cnt error.\n")

return -3

}

}

sock5 这个软件啊 具体的过程 如下:

1.1 安装依赖开发库

# yum install pam-devel openldap-devel openssl-devel

1.2 安装socks 5

下载后解压

# tar -xzvf ss5-3.8.9-8.tar.gz

# cd ss5-3.8.9

# ./configure

# make

# make install

2. socks 5配置

2.1 修改配置文件

# vim /etc/opt/ss5/ss5.conf

auth 0.0.0.0/0 – -

改为

auth 0.0.0.0/0 – u

permit – 0.0.0.0/0 – 0.0.0.0/0 – – – – -

改成为

permit u 0.0.0.0/0 – 0.0.0.0/0 – – – – -

3. 添加socket 5用户

# cat /etc/opt/ss5/ss5.passwd

##用户 密码

ttlsa 123456

4. 启动socket 5

# sh /etc/rc.d/init.d/ss5 start

doneting ss5...

默认情况ss5文件没有执行权限,如果觉得使用sh来启动麻烦,那么按如下方法:

# chmod u+x /etc/rc.d/init.d/ss5

# chkconfig --add ss5 //可选

# chkconfig ss5 on //可选

# service ss5 start

5. 查看是否启动

# netstat -lntp | grep ss5

tcp0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 14262/ss5


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8206060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存