VxWorks中实现SOCKS5代理的示例代码

作者:佚名 上传时间:2023-05-23 运行软件:Wind River 软件版本:VxWorks 6.7 版权申诉

该示例代码展示了如何在VxWorks中实现SOCKS5代理,用于转发网络请求。

/*
 * socks_proxy.c - VxWorks下实现SOCKS5代理的示例代码
 * 首先使用socket API创建代理服务器监听端口,当有请求到达时,解析请求中的目标地址和端口,并建立与目标主机的连接。
 * 使用recv和send API将来自client的请求转发给server,将server的响应转发给client
 */
#include <stdio.h>
#include <sockLib.h>
#include <inetLib.h>
#include <ioLib.h>

void server_task()
{
    int server_fd, client_fd, target_fd;
    struct sockaddr_in server_addr, client_addr, target_addr;
    int server_port = 1080;
    char buffer[4096];
    int len;
    bzero((char *) &server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(server_port);
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    listen(server_fd, 5); 
    while (1) {
        len = sizeof(client_addr);
        client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &len);
        len = recv(client_fd, buffer, sizeof(buffer), 0);
        target_fd = socket(AF_INET, SOCK_STREAM, 0);
        bzero((char *) &target_addr, sizeof(target_addr));
        target_addr.sin_family = AF_INET;
        target_addr.sin_port = htons(buffer[2] * 256 + buffer[3]);
        inet_aton(buffer+4, &target_addr.sin_addr);
        connect(target_fd, (struct sockaddr *)&target_addr, sizeof(target_addr));
        send(target_fd, buffer, len, 0);
        while (len = recv(target_fd, buffer, sizeof(buffer), 0)) {
            send(client_fd, buffer, len, 0);
        }
        close(target_fd);
        close(client_fd);
    }
}

void client_task()
{
    int client_fd, server_fd;
    struct sockaddr_in server_addr;
    int server_port = 1080;
    char buffer[4096];
    int len;
    bzero((char *) &server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(server_port);
    inet_aton("127.0.0.1", &server_addr.sin_addr);
    client_fd = socket(AF_INET, SOCK_STREAM, 0);
    connect(client_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    buffer[0] = 0x05; // SOCKS5版本号
    buffer[1] = 0x01; // 发送1个认证方式
    buffer[2] = 0x00; // 认证方式为无需认证
    send(client_fd, buffer, 3, 0);
    len = recv(client_fd, buffer, sizeof(buffer), 0);
    buffer[0] = 0x05; // SOCKS5版本号
    buffer[1] = 0x01; // 建立TCP连接
    buffer[2] = 0x00; // 保留位,必须为0
    buffer[3] = 0x03; // 目标服务器地址为域名
    strcpy(buffer + 4, "www.google.com");
    buffer[4 + strlen("www.google.com")] = 0;
    buffer[4 + strlen("www.google.com") + 1] = 0x1F; // 目标服务器端口号为80
    buffer[4 + strlen("www.google.com") + 2] = 0x50;
    send(client_fd, buffer, strlen(buffer + 4) + 7, 0);
    len = recv(client_fd, buffer, sizeof(buffer), 0);
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    bzero((char *) &server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(buffer[2] * 256 + buffer[3]);
    inet_aton("112.74.214.43", &server_addr.sin_addr);
    connect(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    send(server_fd, buffer, len, 0);
    while (len = recv(client_fd, buffer, sizeof(buffer), 0)) {
        send(server_fd, buffer, len, 0);
    }
    close(server_fd);
    close(client_fd);
}

int main()
{
    taskSpawn("tServer", 4, 0, 0x1000, (FUNCPTR)server_task, 0,0,0,0,0,0,0,0,0,0);
    taskSpawn("tClient", 4, 0, 0x1000, (FUNCPTR)client_task, 0,0,0,0,0,0,0,0,0,0);
    return 0;
}

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
VxWorks实现SOCKS5代理示例代码
该示例代码展示了如何在VxWorks中实现SOCKS5代理,用于转发网络请求。/* * socks_proxy.c - VxWorks下实现SOCKS5代理的示例代码 * 首先使用socket
VxWorks 6.7
Wind River
2023-05-23 15:51
Python中使用socks5设置全局代理方法示例
主要介绍了Python中使用socks5设置全局代理的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
PDF
465KB
2020-12-17 04:07
代理示例代码
非常清晰明了的,李明杰大大的代理的示例代码
ZIP
0B
2019-06-05 14:33
Java HttpClient实现socks代理示例代码
HttpClient 实现 socks 代理
pdf
47.21 KB
2021-07-01 13:32
1行Go代码实现反向代理示例
暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库。 为项目选择编程语言和挑选你最爱的球队不一样。应该从实用主义出发,根据特定的工作选择合适的工具。 在这篇文章中我会告诉你从何时开始并且为什么我认为
PDF
167KB
2021-01-04 02:03
100行PHP代码实现socks5代理服务器
前两天在B站上看到一个小伙纸100元组装个电脑打LOL画质流畅,突发奇想100行代码能(简单)实现个啥好玩的。我主要是做php开发的,于是就有了本文。 当然,由于php(不算swoole扩展)本身不擅
PDF
66KB
2020-12-23 03:49
Java代理示例代码
示例说明代理模式、Java动态代理的JDK实现和cglib实现。
RAR
0B
2019-07-27 11:24
用C#实现SOCKS5代理服务器源代码
作者:Kingthy早上看到breeze写了一篇Socks5代理协议的文章《C# 实现Socket5代理协议通讯 》,并在评论里看到howaaa说“顺便也讲讲用C#实现一个Socks5代理服务器吧,这
RAR
37KB
2021-05-09 02:28
Linux socks5代理软件
Linuxsocks5代理软件dantesocks5serverhttp://blogold.chinaunix.net/u/89/showart_1073546.html(安装方法)
其他文档
0B
2019-09-21 23:53
Linux socks5代理软件
Linuxsocks5代理软件dantesocks5serverhttp://blogold.chinaunix.net/u/89/showart_1073546.html(安装方法)
其他文档
0B
2019-09-21 23:53