随笔小屋 Logo
首页
瞬间
反馈
随笔小屋 Logo
首页 瞬间 反馈
  1. 首页
  2. linux
  3. 域名解析-http

域名解析-http

  • linux
  • 发布于 2025-12-13
  • 56 次阅读
flor
flor
incluce <netdb.h>
struct hostent* gethostbyname(char const* host_name);
功能:传递主机域名,获取主机信息
参数:host_name 主机域名
返回值:函数执行成功返回表示主机信息的结构体指针,失败返回NULL

struct hostent{
  char *h_name; //主机官方名
  char **h_aliases; //主机别名表
  int h_addrtype; //地址类型
  int h_length; //地址长度
  char **h_addr_list; //IP地址表
};
//域名解析
#include<stdio.h>
#include<arpa/inet.h>
#include<netdb.h>

int main(int argc,char* argv[]){
    //./dns  www.baidu.com
    struct hostent* h = gethostbyname(argv[1]);
    if(h == NULL){
        perror("gethostbyname");
        return -1;
    }
    printf("主机官方名:\n");
    printf("%s\n",h->h_name);
    printf("主机别名表:\n");
    for(char** pp = h->h_aliases;*pp;pp++){
        printf("%s\n",*pp);
    }
    printf("IP地址表:\n");
    for(struct in_addr** pp = (struct in_addr**)h->h_addr_list;*pp;pp++){
        printf("%s\n",inet_ntoa(**pp));
    }
    return 0;
}
http请求{
  方法+url+协议版本{
    HTTP1.0定义了三种请求方法:GET, POST和HEAD
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
    }
  请求头{
    Accept:客户端接收类型,*/*所以类型,type/*该类型下的所有子类型
    Host:服务器绑定的域名
    User_Agent:浏览器表名自己的身份,是那种浏览器
    Referer:客户端跳转前的网址
    Connection:表示是否需要持久连接(keep-alive: (默认) / close: )
    }
}


http响应{
  协议版本+状态码+状态码原因短语{
    200 OK:客户端请求成功
    400 Bad Request:客户端请求有语法错误,不能被服务器所理解
    403 Forbidden:服务器收到请求,但是拒绝提供服务
    404 Not Found:请求资源不存在,举个例子:输入了错误的URL
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    }
  响应头{
    Date:响应时间
    Content-Type:响应类型
    Content-Length:响应数据大小
    Connection:连接状态
    }
}
//http协议
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>

int main(void){
    //创建套接字
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd == -1){
        perror("socket");
        return -1;
    }
    //组织服务器地址结构
    struct sockaddr_in ser;
    ser.sin_family = AF_INET;
    ser.sin_port = htons(80);
    ser.sin_addr.s_addr = inet_addr("61.241.13.229");
    //发起连接
    if(connect(sockfd,(struct sockaddr*)&ser,sizeof(ser)) == -1){
        perror("connect");
        return -1;
    }
    //发送请求
    char request[1024] = {};
    sprintf(request,"GET / HTTP/1.1\r\n"
                    "Host: www.flor.cn\r\n"
                    "Accept: */*\r\n"
                    "Connection: close\r\n\r\n");
    if(send(sockfd,request,strlen(request),0) == -1){
        perror("send");
        return -1;
    }
    //接收响应
    for(;;){
        char respond[1024] = {};
        ssize_t size = recv(sockfd,respond,sizeof(respond)-1,0);
        if(size == -1){
            perror("recv");
            return -1;
        }
        if(size == 0){
            break;
        }
        printf("%s",respond);
    }
    printf("\n");
    //关闭套接字
    close(sockfd);
    return 0;
}

湘ICP备2025147565号-1
gongan beian 湘公网安备43102602000213号
CPU --% | 内存 0.00G/0.00G (0%) | 网络 无活动网卡
服务器资源占用 更新时间 --:--:--