通过SOCKS发送UDP数据包到互联网




一:连接代理服务器
C/C++ code
   
   

if (m_ProxySocket.Create())
if ( ! m_ProxySocket.Connect( " 192.168.0.5 " , 1080 ))
AddString(
" 无法连接代理服务器! " );
else
AddString(
" 连接代理服务器成功。 " );
else
AddString(
" 创建套节字失败! " );



二:
C/C++ code
   
   

BYTE Order[]
= { 5 , 1 , 0 };
m_ProxySocket.Send(Order,
3 );


应答:0x05   0x00   正确

三:
C/C++ code
   
   

BYTE Order[
10 ] = { 5 , 3 , 0 , 1 }; // UDP ASSOCIATE
* (ULONG * ) (Order + 4 ) = inet_addr( " 61.183.220.XX " ); // IP最后一个断用XX代替,实际使用时为一合法IP
* (LPWORD) (Order + 4 + 4 ) = ntohs( 8000 );
m_ProxySocket.Send(Order,
4 + 4 + 2 );


应答:05   00   00   01   C0   A8   00   05   0C   B1   即:192.168.0.5:3249   正确

四:发送UDP数据
C/C++ code
   
   

BYTE Order[
12 ] = { 0 , 0 , 0 , 1 };
* (ULONG * ) (Order + 4 ) = inet_addr( " 61.183.220.XX " );
* (LPWORD) (Order + 4 + 4 ) = ntohs( 8000 );
Order[
10 ] = 0xFF ; // 我要发送的数据
Order[ 11 ] = 2 ; // 我要发送的数据
m_ComSocket.SendTo(Order, 12 , Port, IP); // Port为在第3步得到的端口:3249,IP为在第三步得到的IP:192.168.0.5
// m_ComSocket的创建方法为:m_ComSocket.Create(0, SOCK_DGRAM);



发完第4步后,m_ComSocket没有收到任何回应!注:不通过代理,直接发送0xFF   0x02到61.183.220.XX:8000是有回应的,可见要么数据没有到达61.183.220.XX:8000,要么数据丢失了。或者是我发的格式不正确,我想问题出在第四步,还请高手指点!谢谢。



---------------------------------------


既然你用udp,m_ComSocket怎么可能有反应呢,只要61.183.220.XX:8000能收到就ok了

楼主的假设是正确的,按理能收到回应。这种问题我没见到过。

 我自己解决了,问题在第三步:
C/C++ code
   
   

BYTE Order[
10 ] = { 5 , 3 , 0 , 1 }; // UDP ASSOCIATE
* (ULONG * ) (Order + 4 ) = inet_addr( " 61.183.220.XX " ); // IP最后一个断用XX代替,实际使用时为一合法IP
* (LPWORD) (Order + 4 + 4 ) = ntohs( 8000 );
m_ProxySocket.Send(Order,
4 + 4 + 2 );


改为:
C/C++ code
   
   

CString SocketAddress;
UINT SocketPort;
m_ComSocket.GetSockName(SocketAddress, SocketPort);
// 这是用来接收远程服务器回应的,创建方法:m_ComSocket.Create(0, SOCK_DGRAM);

BYTE Order[
10 ] = { 5 , 3 , 0 , 1 };
* (ULONG * ) (Order + 4 ) = inet_addr(SocketAddress);
* (LPWORD) (Order + 4 + 4 ) = ntohs(SocketPort);
m_ProxySocket.Send(Order,
4 + 4 + 2 );



其实任何地方不用修改,结果正是我想要的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值