你需要读读RFC1928发你的EMAIL地址给我,附上你的问题。
解决方案 »
- 【报恩贴】特别感谢一年前曾经给我帮助的CSDN好人。时隔一年,特来报恩。
- 急、急、、急。。。在线等待....求高手
- WTK 颜色设置的问题
- VS 2008 Tston 的问题
- [急]使用ADO插入数据发生错误,寻求帮助!
- 用SDK ODBC访问Access数据库,同样的代码,以管理员身份运行时比普通用户快了近10倍,请问有可能是什么原因?
- VC下如何使用CF_HTML?? 实现从IE中拖动页面内容(包括格式即源码)到一个对话框的控件中....
- jeff_hunter & beni 请再进来一下,有关怎样让对话框程序一启动就隐含掉后话
- VC中如何使用控件
- 线程 和 列表框显示的速度值
- 怎么使用指向类成员函数的函数指针!!!
- 很多人问过这个问题:没有word如何读取Word文档内容到自己的编辑器?或Doc复合文件的结构是什么?没人知道吗?
[email protected]
[email protected]
2、向服务器发送 05 01 00
3、如果接到 05 00 则是可以代理
4、发送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字节)
5、服务器返回 05 00 00 01 +服务器地址+端口
6、断开连接
7、发送UDP数据报:格式变为
00 00 01 +目的地址IP(4字节)+目的端口 +所要发送的信息
8、接受与原来相同
(因为proxy一般是多宿的,绑定了多个IP)
struct sockaddr_in localAddr;
int len = sizeof(sockaddr);
memset(&localAddr,0,len);
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = inet_addr("0.0.0.0");
localAddr.sin_port = htons(localPort);
udp_sockfd = socket(AF_INET,SOCK_DGRAM,0);
if (udp_sockfd == -1)
{
AfxMessageBox("SOCKET INITISLIZE ERROR!");
return FALSE;
} result = bind(udp_sockfd,(sockaddr*)&localAddr,len);
if (result == -1)
{
closesocket(udp_sockfd);
AfxMessageBox(_T("绑定本地端口失败!"));
return FALSE;
}发送请求接受代理的 REP result = send(tcp_sockfd,buffer,10,0);
result = recv(tcp_sockfd,buffer,MAX_BUFFER,0);
closesocket(tcp_sockfd);
if ( (buffer[0] != 5) || (buffer[1] != 0) )
return FALSE; memcpy(&Bndip,buffer+4,4);
int pp;
memcpy(&BndPort,buffer+8,2);
pp = ntohs(BndPort);
BndPort = pp;
tcp_Close();
(注: 此时返回了代理在局域网段的网址以及分配的一个端口)
发送数据报:
//DATAGRAM HEADER buffer[0]=0x00;
buffer[1]=0x00;
buffer[2]=0x00; //FRAG this datagram is alone
buffer[3]=0x01; // ipv4
memcpy(&buffer+4,&ip,4); //目标ip
memcpy(buffer+8,&port,2) ; //目的端口,均为网络字节顺序
memcpy(buffer+10,buff,len); struct sockaddr_in proxyAddr;
int socklen = sizeof(sockaddr);
memset(&proxyAddr,0,socklen);
proxyAddr.sin_family = AF_INET; proxyAddr.sin_addr.s_addr = Bndip;
proxyAddr.sin_port = htons(BndPort);
result = sendto(udp_sockfd,buffer,len+10,0,(struct sockaddr*)&proxyAddr,socklen);
return result;接受数据报:
int result = 0;
struct sockaddr_in sourAddr;
int len = sizeof(sockaddr);
memset(&sourAddr,0,len);
sourAddr.sin_family = AF_INET;
sourAddr.sin_addr.s_addr = inet_addr("0.0.0.0");
sourAddr.sin_port = htons(localPort);
result = recvfrom(udp_sockfd,buffer,MAX_BUFFER,0,(sockaddr*)&sourAddr,&len); // (总是阻塞在这儿!)
return result;谢谢 Kronus(Kronus)!
buffer[result] = '\n';
result = sendto(udp_sockfd,buffer,result,0,(struct sockaddr*)&sourAddr,len);
客户端: int result = 0;
struct sockaddr_in sourAddr;
int len = sizeof(sourAddr);
result = recvfrom(udp_sockfd,buffer,MAX_BUFFER,0,(sockaddr*)&sourAddr,&len); //阻塞在此处!!!!!!!!!!!!!!!!!
哪位大侠快出手!!
同样的.
CString strProxy("10.0.0.103");
UINT nProxyPort = 1080;
CString strUserName("caijs");
CString strPassword("caijs"); struct sockaddr_in proxy_addr;
proxy_addr.sin_family = AF_INET;
proxy_addr.sin_addr.s_addr = 0;
proxy_addr.sin_port = 0;
CProxy proxy;
CTCPSocket* pSockProxy = new CTCPSocket();
pSockProxy->Create();
//Socks5认证
proxy.TCPProxyReqAuth5(
pSockProxy,
strProxy,
nProxyPort,
strUserName,
strPassword
);
//
proxy.Socks5Udp(pSockProxy,proxy_addr); //
struct sockaddr_in remote_address;// 主机地址.
remote_address.sin_family = AF_INET;
remote_address.sin_addr.s_addr = inet_addr("10.0.0.103");;
remote_address.sin_port = proxy_addr.sin_port;//htons(6779); char buf[20];
buf[0] = 0;
buf[1] = 0;
buf[2] = 0;//不分片为0,分片为1。
buf[3] = 1;//IPV4为1。
memcpy(&buf[4],&remote_address.sin_addr.s_addr,4);
memcpy(&buf[8],&remote_address.sin_port,2);
memcpy(&buf[10],"abcd",5); SOCKET sUdp = socket(AF_INET, SOCK_DGRAM, 0);
bind(sUdp,(struct sockaddr FAR *)&remote_address,sizeof(remote_address));
//
int iRet = sendto(sUdp,buf,15,0,(sockaddr*)&proxy_addr,sizeof(proxy_addr));
memset(buf,0,20);
int addrLen = sizeof(remote_address);
iRet = recvfrom(sUdp,buf,15,0,(sockaddr*)&remote_address,&addrLen);
//在这不行了.
//
closesocket(sUdp);
delete pSockProxy;
帮忙看看
来吧,来吧!