18,356
社区成员
发帖
与我相关
我的任务
分享
//发送连接请求的命令,s已经连接到代理服务器的套接字,dwIP要连接到的目标IP地址,uPort要连接到的目标端口
int CSocks::SendConnectCommand(SOCKET s,DWORD dwIP,USHORT uPort)
{
/*+----+-----+-------+------+----------+----------+
|VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+
| 1 | 1 | X'00' | 1 | Variable | 2 |
+----+-----+-------+------+----------+----------+ */
char szCommand[512];
int iSend; //发送了多少字节
int iRecv; //接收的字节数
memset(szCommand,0,512);
szCommand[0] = 0x05;
szCommand[1] = 0x01;
szCommand[3] = 0x01;
*((DWORD*)(szCommand + 4)) = dwIP; //IP
*((USHORT*)(szCommand + 8)) = uPort; //端口
iSend = send(s,szCommand,10,0);
if (SOCKET_ERROR == iSend)
{
.。。。
return -1;
}
memset(szCommand,0,512);
iRecv = recv(s,szCommand,512,0);
if (SOCKET_ERROR == iRecv)
{
。。。。
return -1;
}
if (0x05 != szCommand[0])
{
.。。。
return -1;
}
if (0x00 != szCommand[1])
{
shutdown(s,2);
closesocket(s);
CString strError;
switch(szCommand[1])
{
case 1:
strError = "general SOCKS server failure ";
break;
case 2:
strError = "connection not allowed by ruleset ";
break;
case 3:
strError = "Network unreachable ";
break;
case 4:
strError = "Host unreachable ";
break;
case 5:
strError = "Connection refused ";
break;
case 6:
strError = "TTL expired ";
break;
case 7:
strError = "Command not supported ";
break;
case 8:
strError = "Address type not supported ";
break;
case 9:
strError = " to X\'FF\' unassigned ";
break;
default:
strError = " Unknow error ";
break;
}
。。。。。
return -1;
}
return 0;
}