【Linux服務】socket5代理服務器搭建

如果在系統中需要搭建socket代理服務,可以參照如下腳本:

1、將賬號密碼替換成自己想要的設置

2、將"端口"替換成需要的端口號

3、運行腳本,即可完成安裝

4、可通過netstat -lntp | grep ss5命令查看端口是否正常監聽

5、通過腳本 curl myip.ipip.net --socks5 ip:port -U user:password驗證帶來是否安裝完成

#/bin/bash
yum -y install gcc openldap-devel pam-devel openssl-devel
mkdir -p /data/ss5
cd /data/ss5
wget https://nchc.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
tar -xf ss5-3.8.9-8.tar.gz
cd ss5-3.8.9/
./configure
make
make install 
echo 'auth    0.0.0.0/0               -               u
permit -	0.0.0.0/0	-	0.0.0.0/0	-	-	-	-	-	'  >  /etc/opt/ss5/ss5.conf
echo '賬號 密碼' > /etc/opt/ss5/ss5.passwd
echo 'SS5_OPTS=" -u root -b 0.0.0.0:端口"' >  /etc/sysconfig/ss5
chmod u+x /etc/rc.d/init.d/ss5
chkconfig --add ss5
chkconfig ss5 on
service ss5 start

如果有需要的java使用代理也可參照如下代碼:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.net.SocksProxy;
import java.io.IOException;
import java.net.*;
import java.util.concurrent.Callable;

/**
 * @description:
 * @author: syy
 * @create: 2020-05-14 16:56
 **/

public class SocketCheckThread implements Callable<CheckStatus>
{
    private Logger logger = LoggerFactory.getLogger(SocketCheckThread.class);

    /**
     * 等待超時時間
     */
    private final int SEC_WAIT = 5;

    private String ip;

    public SocketCheckThread(String ip)
    {
        this.ip = ip;
    }


    @Override
    public CheckStatus call()
    {
        CheckStatus checkStatus = new CheckStatus();
        checkStatus.setIp(ip);
        checkStatus.setStatus(check());
        return checkStatus;
    }


    private boolean check()
    {
        Socket socket = null;
        try {

            Proxy proxy = createProxy();
            socket = new Socket(proxy);
            socket.connect(new InetSocketAddress(this.ip ,80), SEC_WAIT * 1000);
            return true;
        }
        catch (Exception e) {
            logger.debug("檢測超時{}",this.ip,e);
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch (IOException e)
            {
                logger.debug("關閉socket失敗",e.getMessage());
            }
        }
        return false;
    }


    private static Proxy createProxy() {
        // 設置認證
        String proxyAddr = ip;
        int proxyPort = port;
        Authenticator.setDefault(new Authenticator(){
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("user", "password".toCharArray());
            }
        });

        SocksProxy proxy = SocksProxy.create(new InetSocketAddress(proxyAddr, proxyPort),5);
        return proxy;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章