我无法使用浏览器的简单代理服务器获得http响应

文卡特什·科普普拉武里(Venkatesh Koppuravuri)

我已经编译了这个c文件,并在端口6666上运行。我已将浏览器设置更改为localhost和端口6666。尝试连接时无法加载html页面,但在浏览器中出现连接重置”如何解决此问题?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>

void error(char* msg)
{
    perror(msg);
    exit(0);
}

int main(int argc,char* argv[])
{
    pid_t pid;
    struct sockaddr_in addr_in,cli_addr,serv_addr;
    struct hostent* host;
    int sockfd,newsockfd;

    if(argc<2)
        error("./proxy <port_no>");

    printf("\n*****WELCOME TO PROXY SERVER*****\n");
    printf("\nCopyright (c) 2014  GODLY T.ALIAS\n\n");

    bzero((char*)&serv_addr,sizeof(serv_addr));
    bzero((char*)&cli_addr, sizeof(cli_addr));

    serv_addr.sin_family=AF_INET;
    serv_addr.sin_port=htons(atoi(argv[1]));
    serv_addr.sin_addr.s_addr=INADDR_ANY;


    sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(sockfd<0)
        error((char*)"Problem in initializing socket");

    if(bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
        error((char*)"Error on binding");


    listen(sockfd,50);
    //int clilen=sizeof(cli_addr);
    socklen_t clilen;


accepting:

    newsockfd=accept(sockfd,(struct sockaddr*)&cli_addr,&clilen);

    if(newsockfd<0)
        error((char*)"Problem in accepting connection");

    pid=fork();
    if(pid==0)
    {
        struct sockaddr_in host_addr;
        int flag=0,newsockfd1,n,port=0,i,sockfd1;
        char buffer[510],t1[300],t2[300],t3[10];
        char* temp=NULL;
        bzero((char*)buffer,500);
        recv(newsockfd,buffer,500,0);

        sscanf(buffer,"%s %s %s",t1,t2,t3);


        if(((strncmp(t1,"GET",3)==0))&&((strncmp(t3,"HTTP/1.1",8)==0)||(strncmp(t3,"HTTP/1.0",8)==0))&&(strncmp(t2,"http://",7)==0))
        {
            strcpy(t1,t2);

            flag=0;

            for(i=7;i<strlen(t2);i++)
            {
                if(t2[i]==':')
                {
                    flag=1;
                    break;
                }
            }

            temp=strtok(t2,"//");
            if(flag==0)
            {
                port=80;
                temp=strtok(NULL,"/");
            }
            else
            {
                temp=strtok(NULL,":");
            }

            sprintf(t2,"%s",temp);
            printf("host = %s",t2);
            host=gethostbyname(t2);

            if(flag==1)
            {
                temp=strtok(NULL,"/");
                port=atoi(temp);
            }


            strcat(t1,"^]");
            temp=strtok(t1,"//");
            temp=strtok(NULL,"/");
            if(temp!=NULL)
                temp=strtok(NULL,"^]");
            printf("\npath = %s\nPort = %d\n",temp,port);


            bzero((char*)&host_addr,sizeof(host_addr));
            host_addr.sin_port=htons(port);
            host_addr.sin_family=AF_INET;
            bcopy((char*)host->h_addr,(char*)&host_addr.sin_addr.s_addr,host->h_length);

            sockfd1=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
            newsockfd1=connect(sockfd1,(struct sockaddr*)&host_addr,sizeof(struct sockaddr));
            sprintf(buffer,"\nConnected to %s  IP - %s\n",t2,inet_ntoa(host_addr.sin_addr));
            if(newsockfd1<0)
                error("Error in connecting to remote server");

            printf("\n%s\n",buffer);
            //send(newsockfd,buffer,strlen(buffer),0);
            bzero((char*)buffer,sizeof(buffer));
            if(temp!=NULL)
                sprintf(buffer,"GET /%s %s\r\nHost: %s\r\nConnection: close\r\n\r\n",temp,t3,t2);
            else
                sprintf(buffer,"GET / %s\r\nHost: %s\r\nConnection: close\r\n\r\n",t3,t2);


            n=send(sockfd1,buffer,strlen(buffer),0);
            printf("\n%s\n",buffer);
            if(n<0)
                error("Error writing to socket");
            else{
                do
                {
                    bzero((char*)buffer,500);
                    n=recv(sockfd1,buffer,500,0);
                    if(!(n<=0))
                        send(newsockfd,buffer,n,0);
                }while(n>0);
            }
        }
        else
        {
            send(newsockfd,"400 : BAD REQUEST\nONLY HTTP REQUESTS ALLOWED",18,0);
        }
        close(sockfd1);
        close(newsockfd);
        close(sockfd);
        _exit(0);
    }
    else
    {
        close(newsockfd);
        goto accepting;
    }
    return 0;
}
太阳的儿子

这可能不是代码问题,而是net :: ERR_CONNECTION_RESET问题。

可能的解决方案:转到

chrome setting > Privacy > Content Settings > Cookie > All cookie and Site Data > Delete domain problem

参见参考链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

HTTP代理服务器测试

来自分类Dev

HTTP代理服务器测试

来自分类Dev

为什么代理服务器无法收到服务器的响应

来自分类Dev

用于浏览器代理服务器的ChildProcess :: LaunchError启动

来自分类Dev

配置Burp Suite以拦截Web浏览器和代理服务器之间的数据

来自分类Dev

C#简单HTTP服务器未将响应发送到浏览器

来自分类Dev

无法使用浏览器使用http中的域名访问我的服务器

来自分类Dev

具有NodeJ的简单代理服务器

来自分类Dev

Chrome浏览器为何无法识别我的http2服务器?

来自分类Dev

级联的HTTP代理服务器如何工作?

来自分类Dev

如何使Thunderbird通过HTTP代理服务器工作?

来自分类Dev

使用Python连接到Tor网络而未获得“代理服务器拒绝连接”

来自分类Dev

网页无法到达反向代理服务器

来自分类Dev

我怎么知道我正在使用什么代理服务器?

来自分类Dev

RavenDb使用来自IE的代理服务器

来自分类Dev

如何配置Maven不使用代理服务器

来自分类Dev

使用代理服务器时Gradle同步失败

来自分类Dev

如何使用symfony / panther设置代理服务器

来自分类Dev

使用Apache作为代理服务器+ Tomcat

来自分类Dev

使用代理服务器充当主机文件

来自分类Dev

使用套接字.net的代理服务器

来自分类Dev

通过使用Angular JS的代理服务器的HTTP请求

来自分类Dev

使用PHP检测等效的$ _SERVER ['HTTP_REFERER']代理服务器

来自分类Dev

为什么即使使用代理服务器,我的真实IP地址仍然可见?

来自分类Dev

代理服务器的推荐端口

来自分类Dev

API代理服务器

来自分类Dev

确定代理服务器/端口

来自分类Dev

Nginx与代理服务器的位置

来自分类Dev

API代理服务器

Related 相关文章

热门标签

归档