美文网首页
badvpn之tun2socks的socks5-udp模式

badvpn之tun2socks的socks5-udp模式

作者: 赵海洋 | 来源:发表于2020-06-12 11:24 被阅读0次

badvpn的tun2socks加上了选 项--socks5-udp,以支持直接将tun设备的udp数据包通过sock5代理直接发送。以前是封装为tcp数据包,然后发送给--udpgw-remote-server-addr指定的地址。然后udpgw程序再使用udp发向源服务器,并将接收的包转发回tun设备。

SocksUdpClient

在main函数中就根据命令行的模式不同,然后调用SocksUdpClient_Init对全局的socks_udp_client进行初使化。

socks_udp_client 使用平衡树来管理与sock5服务器的连接。

udp数据处理流程

在tun2socks.c的process_device_udp_packet函数中对接收到的设备发送的udp数据进行处理转发。
根据udp的模式调用udpgw或udp通道:

    // submit packet to udpgw or SOCKS UDP
    if (udp_mode == UdpModeUdpgw) {
        SocksUdpGwClient_SubmitPacket(&udpgw_client, local_addr, remote_addr,
                                      is_dns, data, data_len);
    } else if (udp_mode == UdpModeSocks) {
        SocksUdpClient_SubmitPacket(&socks_udp_client, local_addr, remote_addr, data, data_len);
    }

SocksUdpClient_SubmitPacket中在socks_udp_client 树里根据地址查找连接find_connection(o, local_addr),如果没有查找到就调用 connection_init,查找到了就调用connection_send发送数据。

connection_init流程

  1. 分配SocksUdpClient_connection对象con,并初使化
  2. 拷贝第一块数据,并设置first_job_handler为第一执行函数。
  3. BDatagram_Init初使化一个udp socket: con->socket
  4. 调用BSocksClient_Init分配和初使化socks5连接(con->socks),并设置状态回调:socks_state_handler
  5. 添加不活跃监视回调:send_monitor_handler
  6. 添加接收数据回调:recv_if_handler_send

然后在BReactor_Exec执行循环中执行了在connection_init里设置的BPendingGroup_ExecuteJob和first job。即first_job_handler,在first_job_handler里调用connection_send函数。

connection_send流程

connection_send 组成一个udp socks5数据包。使用BufferWriter_EndPacket写入发送队列。

socks状态回调 socks_state_handler

第一个connection_send调用后,会触发socks_state_handler,在这里进行地址的转换,以及连接错误后释放资源。

弃了。

本来这个博文是因为下面这个报错,才研究代码时顺手记录的:

截止至最新版本的 4b7070d 代码中,如果使用--socks5-udp模式,windows下的程序会报错:ERROR(SocksUdpClient): Low-level datagram error 10.95.27.60:55913, removing connection.

但测试中又发现,是由于使用的sscap的sock5不支持udp模式导致socks5服务器连不上导致的问题,不是badvpn代码的问题,所以先随便记录到这里。。。后续流程有缘再续

相关文章

  • badvpn之tun2socks的socks5-udp模式

    badvpn的tun2socks加上了选 项--socks5-udp,以支持直接将tun设备的udp数据包通过so...

  • NetWork Extension

    tun2socks https://www.yuanmas.com/info/8VaPVVEZOr.html[ht...

  • iOS设计模式之美-适配器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • iOS设计模式之美-抽象工厂模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • iOS设计模式之美-工厂模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • iOS设计模式之美-生成器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • 模式匹配

    模式匹配之字符串 模式匹配之匹配类型 模式匹配之匹配数组、元组、集合 模式匹配之样例类 模式匹配之偏函数

  • Java23种设计模式之「单例模式」

    单例模式 之 holder 模式 (推荐) 单例模式 之 饱汉模式(懒汉模式) 单例模式 之 双重锁检查 (Dou...

  • 设计模式演变过程

    基本设计模式之MVC模式 基本设计模式之MVP模式 基本设计模式之MVVM模式 SPA和MPA SPA:单页面应用...

网友评论

      本文标题:badvpn之tun2socks的socks5-udp模式

      本文链接:https://www.haomeiwen.com/subject/eaxgtktx.html