c++ - socks 5 UDP 连接

标签 c++ proxy udp socks

我正在尝试连接到 UDP Socks5 代理,但没有服务器会回复我的初始握手。 Wire shark 显示正确的信号正在发送到服务器,但没有收到回复

#define PUT_BYTE(ptr,data) (*(unsigned char*)ptr = data)



static int Connect_proxy(SOCKET sock,sockaddr_in Rcv_address) {

char buff[200],*ptr;
sockaddr_in SenderAddrTemp;
int SenderAddrSize= sizeof(SenderAddrTemp);

ptr=buff;
int iResult;

PUT_BYTE(ptr++,5);
PUT_BYTE(ptr++,1);
PUT_BYTE(ptr++,0);  


iResult = sendto(sock,
    buff, ptr-buff, 0, (SOCKADDR *) & Rcv_address, sizeof (Rcv_address));

if (iResult == SOCKET_ERROR) {
    wprintf(L"[Send]Conection request failed with error: %d\n",      WSAGetLastError());
    //closesocket(sock);
    //WSACleanup();
    return -1;

}
iResult = recvfrom(sock,buff, 200, 0, (SOCKADDR *) & SenderAddrTemp, &SenderAddrSize);
if (iResult==-1) { 
    wprintf(L"[Recv] Connection request failed with error: %d\n", WSAGetLastError());
    return -1;
}
else
    if (iResult==2)  {
        wprintf(L"OK");
    }

    return 0;

套接字初始化是:

    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != NO_ERROR) {
    wprintf(L"WSAStartup failed with error: %d\n", iResult);
    return 1;
}

//---------------------------------------------
// Create a socket for sending data
SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (SendSocket == INVALID_SOCKET) {
    wprintf(L"socket failed with error: %ld\n", WSAGetLastError());
    WSACleanup();
    return 1;
}


RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(8888);
RecvAddr.sin_addr.s_addr = inet_addr("114.207.246.173");

service.sin_family = AF_INET;
service.sin_addr.s_addr = htonl(INADDR_ANY);
service.sin_port = htons(0);

bind(SendSocket, (SOCKADDR *) &service, sizeof (service));

if (iResult == SOCKET_ERROR) {
    wprintf(L"bind failed with error %u\n", WSAGetLastError());
    closesocket(SendSocket);
    WSACleanup();
    return 1;
}
Connect_proxy(SendSocket,RecvAddr);

谢谢!

最佳答案

固定:

虽然 socks 连接将是 UDP,但握手必须在 TCP 中完成

SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//这必须成为一个 TCP 套接字 SOCK_STREAM

关于c++ - socks 5 UDP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19561255/

相关文章:

c++ - 斐波那契数列的时间复杂度

java - Http 客户端连接因大数据请求而失败

python - 关于是否在 TCP 代理项目中使用 Twisted 的一般问题

c++ - 将 RTP 流数据写入文件

c - 通过 UDP 传输文件内容后获取垃圾字符

ssl - Openvpn 配置未连接到服务器

C++ - 最佳实践 : `using std::cout` vs `std::cout`

c++ - 如何使用与 MSVS 中相同的设置从 cmd 运行 cl.exe?

java - 配置应用程序以使用设置中的代理

c++ - C++中的可变用户定义参数列表?