HTTP代理服务器

代理服务器实现流程

  • 创建一个监听服务器,监听客户端的连接。
  • 客户端连接上后,将客户端要上网的信息,发给网络web服务器,
  • 然后从那里读取数据,再发给客户端。

注:客户端是通过浏览器的设置,来设置我的地址和端口,一旦访问某个域名,就会和代理服务器连接。

代理服务器本身既是服务器,又是客户端。对浏览器来说,是服务器,对网页服务器来说是客户端。例如:代理服务器放在国外的主机上,可实现翻墙,当访问敏感数据,经过防火墙易被查出来了。

浏览器设置:

代理服务器代码:

#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//创建监听套接字
int create_listensocket(void)
{
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    int n = 1;
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)); //地址复用
    
    struct sockaddr_in sin;
    bzero(&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(2020);
    sin.sin_addr.s_addr = INADDR_ANY; //listen any add
    //bangding
    if(bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
    {
        perror("bind");
    }
    listen(fd, 50);
    return fd;
}
//替换字符串
void replace(char *in, char *out)
{
    //取出文件名
    char filename[30]={0};
    sscanf(in, "%*[^//]//%*[^/]%s", filename); //略过前面
    printf("文件名是%s\n",filename);
    
    //取出后面部分+前面的部分GET (HTTP/1.1...)
    char *tail = strstr(in, "HTTP/"); //搜索HTTP子字符串
    
    char method[10] = {0};
    sscanf(in, "%s", method); //s碰到空格就会停下来
    //再组合起来
    sprintf(out, "%s %s %s", method, filename, tail);
    //GET http://www.163.com/abc.txt HTTP/1.1
    //--->GET /abc.txt HTTP/1.1
}

//处理客户端的读写
void handleclient(int fd)
{
    //1 从客户端读取要上网的信息
    char buffer[1024*1024]={0};
    int nread = read(fd, buffer, sizeof(buffer));
    //打出来
    printf("%s\n",buffer);
//GET http://www.163.com/abc.txt HTTP/1.1
//Host: www.163.com
//User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0
//Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
//Accept-Language: en-US,en;q=0.5
//Accept-Encoding: gzip, deflate
//Connection: keep-alive
//Upgrade-Insecure-Requests: 1
    //2 转发给真正服务器
    //需要将第一行域名变成文件名,如果单有域名没有文件名,则使用"/"
    char buffernew[1024*1024]={0};
    replace(buffer, buffernew);
    printf("经过替换后的字符串是%s\n", buffernew);
    //输出了一团为二进制(真正的请求里会有二进制,不能简单看做字符串,否则网页显示不完整)
    
    //3 连接真正的服务器,把替换后的东西发给它
    //解析域名
    char hostname[30]={0};
    sscanf(buffer, "%*[^//]//%[^/]",hostname);
    printf("域名是%s\n",hostname);
    //域名转ip
    struct hostent *ent = gethostbyname(hostname);
    //构建服务器的地址结构体
    struct sockaddr_in serversin;
    bzero(&serversin, sizeof(serversin));
    serversin.sin_family = AF_INET;
    serversin.sin_port = htons(80); //端口默认是80
    memcpy(&serversin.sin_addr, ent->h_addr, ent->h_length);
    
    //连接网页服务器
    int myfd = socket(AF_INET, SOCK_STREAM, 0);
    int res = connect(myfd, (struct sockaddr *)&serversin, sizeof(serversin));
    if(res < 0)
    {
        perror("connect");
        return;
    }
    printf("连接成功\n");
    //将替换后的头部发给服务器
    write(myfd, buffernew, strlen(buffernew));
    
    //从网页服务器读回结果
    int len;
    while(read(myfd, buffer, 1) > 0) //如果大于0,表示有数据
    {    //此处处理二进制
        write(fd, buffer, 1); //客户端fd
    }
}

int main()
{
    //1 创建监听套接字,等待客户端(浏览器)的连接
    int listenfd = create_listensocket();

    //2 接受客户端的连接,然后去处理连接
    while(1) //单线运行比较慢
    {
        //从监听套接字复制出新的fd描述符,去分别和客户端连接
        int clientfd = accept(listenfd, NULL, NULL);
        //处理
        if(fork()==0) //新进程
        {
            handleclient(clientfd);
            close(clientfd);
            exit(0);
        }
        
    }
}

运行结果:

在浏览器中输入www.163.com 然后回车

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71928.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx获取代理服务ip及客户端真实ip

一、问题背景   在实际应用中&#xff0c;我们可能需要获取用户的ip地址&#xff0c;比如做异地登陆的判断&#xff0c;或者统计ip访问次数等&#xff0c;通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip&#xff0c;但是当我们使用了nginx 作为反向代理后…

如何使用国内代理ip?

现在市面上有很多代理ip&#xff0c;功能多种多样&#xff0c;五花八门的产品让用户挑花了眼&#xff0c;下面是购买代理IP时应该是注意的几点。 代理IP类型代理IP分为多种类型&#xff0c;按照匿名度区可分为透明代理、普通代理、高匿代理&#xff1b;按照用途可分为HTTP代理…

获取客户端IP地址(nginx代理)

需求 对接支付系统的时候, 需要传入 付款方,也就是客户端的IP地址 现象 客户端的请求走我们的 nginx 代理了, 获取到的客户端ip地址不对, 变成了 nginx 服务器的地址了 data 的值是nginx服务器的地址, 这样很明显不对 没有加之前的配置 解决方案 在 nginx 的配置里面加上…

代理ip

proxies有两种协议&#xff0c;http 和 https&#xff0c;访问http协议的网页&#xff0c;需要将代理设置成http&#xff0c;https 也是如此&#xff0c;如果设置错误&#xff0c;仍会使用你自己的IP地址。 https://icanhazip.com/ 这个链接可以查看你访问这个网页所使用的的I…

ip代理

为什么会出现IP被封 网站为了防止被爬取&#xff0c;会有反爬机制&#xff0c;对于同一个IP地址的大量同类型的访问&#xff0c;会封锁IP&#xff0c;过一段时间后&#xff0c;才能继续访问 如何应对IP被封的问题 有几种套路&#xff1a; 修改请求头&#xff0c;模拟浏览器…

测试一下博弈Ai能不能让你成为一个出色的服装设计师

笔者也不是专业的设计人员&#xff0c;就是突发奇想&#xff0c;看看怎么利用博弈AI的设计一款自己风格的衣服。 首先我们打开博弈AI的官网&#xff0c;链接&#xff1a;博弈Ai-基于ChatGPT4及3.5的智能聊天机器人国产镜像 我们把自己的创意和要求提交给博弈AI&#xff0c;就得…

传统企业如何面对电子商务的发展

传统企业如何面对电子商务的发展 在现代生活中&#xff0c;人们对电子商务已经不再陌生。但是随着在电子商务的快速发展&#xff0c;传统零售企业的生存环境变得更加困难&#xff0c;不但面临着上游原材料价格飞涨的困扰&#xff0c;还受到下游渠道商、零售商、品牌商的多重挤…

2022跨境电商新战场:海外社交电商发展前景分析

社交电商正在慢慢改变人们的购物习惯。最近几年&#xff0c;国内由于疫情和电商平台流量红利减少的影响&#xff0c;出现了一批已抖音、快手为代表的社交电商&#xff0c;且迅速大火。随着TikTok在海外的不断布局&#xff0c;社交电商模式的影响力也在不断扩大。作为Nox聚星的营…

电子商务时代,企业社交电商转型要做什么?

当前,全球经济一体化已经成为一种趋势&#xff0c;电商企业的出现也迅速改变了传统的经济交易方式和经济的形式,进一步促进了经济结构的重组及调整,推动了工业经济快速向信息经济转换。 电子商务的诞生给世界经济发展带来了新的推动力,并且给企业创造了新的商业机遇,企业可以提…

盘点两个神器,快速告别垃圾短信邮件

前言 在日常生活中&#xff0c;我们时常会接收到一些垃圾短信和邮件&#xff0c;造成这种原因就是因为我们使用自己的手机号码在 App 上 注册了账号&#xff0c;导致手机号泄露&#xff0c;成为了别人发财的工具。 一、如何避免接收垃圾短信 众所周知&#xff0c;针对短信和…

使用 ChatGPT、Stable Diffusion、React 和 NodeJS 构建网站画廊

TLDR 在本文中&#xff0c;您将学习如何构建一个 Web 应用程序&#xff0c;该应用程序使用 ChatGPT 和 Stable Diffusion 为您提供的任何网站描述生成徽标和合适的域名。 介绍 人工智能正在接管世界。这些技术每天都在震撼着我们的世界&#xff1a;ChatGPT 和 Stable Diffusion…

工业富联2018年报来了!上市后首张成绩单大起底

未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。 未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云…

工业富联上半年实现营收1705亿元 云服务设备营收同比增15%

【TechWeb】8月14日消息&#xff0c;上交所上市公司工业富联昨晚发布了2019年半年度报告。报告显示&#xff0c;工业富联上半年实现营收1705亿元。 图片来自工业富联财报 工业富联称&#xff0c;2019 年上半年&#xff0c;公司实现营业总收入 1,705.08 亿元&#xff0c;同比增长…

工业互联网:制造业的二次升级

1.工业互联网的概念及发展历史 工业互联网的概念出现时间并不长&#xff0c;最早可追溯至2012年GE发布的工业互联网白皮书。GE 在白皮书中对工业互联网的定义为“打破智慧和机器的边界“&#xff08;英文原文为 Industrial Internet: Pushing the Boundaries of Minds and Mach…

工业互联网赋能提速,平台要竞争还是生态?

随着数字化转型的深入&#xff0c;国内制造业产业转型升级的需求日渐升级&#xff0c;工业互联网作为新基建七大领域之一正迎来巨大的发展潜力。据工信部数据显示&#xff0c;截止今年第一季度&#xff0c;全国具有一定行业区域影响力的工业互联网平台已超过100个&#xff1b;2…

工业互联网平台TOP15发布!附15个平台详细介绍!

2019年8月&#xff0c;工信部公示了十大国家级“跨行业跨领域工业互联网平台”。2020年,工信部再次发布2020双跨工业互联网平台名单&#xff0c;仅一年的时间&#xff0c;双跨平台清单再增五家。 清单包括海尔、航天云网、东方国信、徐工、树根互联、用友、阿里云、浪潮云、华为…

郭台铭的工业互联网野心有多大?

文章经授权转载自中国电子报&#xff08;ID&#xff1a;cena1984&#xff09; 鸿海富士康科技集团总裁郭台铭即将在10月8日迎来68岁生日&#xff0c;已经拥有了排名全球500强第24位的鸿海富士康&#xff08;2018年《财富》500强全球企业排名中鸿海精密排名第24位&#xff09;&a…

现有工业物联网数据管理系统的部分解决方案

目录 1、工业互联网体系架构 2、工业互联网平台的特征 3、参与工业互联网建设的公司 3.1 国内工业互联网平台 3.2 国外工业互联网平台 参考文献 1、工业互联网体系架构 纵向看&#xff0c;工业互联网包括三大体系&#xff1a;网络体系是基础&#xff0c;用于互联互通&am…

要做中国的GE,富士康工业互联网做得怎么样?

中国软件网 出品 作者 赵满满 1 转型先改名 2015年&#xff0c;鸿海精密决定转型“工业互联网”&#xff0c;2018年鸿海精密把富士康改名为工业富联&#xff08;富士康工业互联网&#xff09;在上海A股挂牌上市。 名字改得好不好不知道&#xff0c;开盘时的5000多亿市值&#x…

工业互联网产业链全景图深度分析

工业互联网领域有哪些投资机会&#xff1f; “新基建”是与传统基建相对应&#xff0c;结合新一轮科技革命和产业变革特征&#xff0c;面向国家战略需求&#xff0c;为经济社会的创新、协调、绿色、开放、共享发展提供底层支撑的具有乘数效应的战略性、网络型基础设施。其中“新…