根据域名找到IP地址 getipbyhostname.c

* getipbyhostname.c

cpp 复制代码
#include <netdb.h>  /* gethostbyname */
#include <time.h>   /* time_t, localtime */
#include <errno.h>  /* errno */
#include <netinet/in.h> /* struct in_addr */
#include <arpa/inet.h>  /* inet_ntoa */
#include <string.h> /* strncpy */
#include <stdarg.h> /* va_start, va_end */
#include <stdio.h>

#define E_FAIL -1
#define E_OK 0

#define _FL_ __FILE__,__LINE__

#define E_MESSAGE 10000
#define E_ALLOC  10300
#define E_SOCKFD_SEND  10359
#define E_SOCKFD_RECV  10360
#define E_OSCALL    10201  /* 系统函数(%s)调用出错 */
#define E_FUNCALL   10202  /* 平台函数(%s)调用出错 */

#ifndef pid_t
typedef int pid_t;
#endif
extern  pid_t getpid(void);

int bclerrlog(int appcode, char *file, long line, const char *fmt, ...)
{
  time_t now_time;
  struct tm *info;
  char dt_buf[64];
  char appmsg[512];
  va_list ap;

  va_start(ap, fmt);
  /* bclerreg(appcode, file, line, fmt, ap); */
  vsnprintf(appmsg, 512, fmt, ap);

  time( &now_time );
  info = localtime( &now_time );
  strftime(dt_buf, 80, "%Y-%m-%d %H:%M:%S", info);
  fprintf(stderr, "---- %s ----\n", dt_buf);

  fprintf(stderr, "PID: %d\tFile: %s\tLine: %ld\n", getpid(), file, line);
  fprintf(stderr, "App Error: %d - %s\n", appcode, appmsg);
  fprintf(stderr, "System Error: %d - %s\n", errno, strerror(errno));
  va_end(ap);
}

#if 0
typedef union {
  unsigned char a[4];
  unsigned int m;
} IPAddr_t;
#endif

int main(int argc, char *argv[])
{
  char host_name[256];
  struct hostent *host_entry;
  char *IPbuffer;
  struct in_addr addr;

  /* strncpy(host_name, "p3-sign.douyinpic.com", 256); */
  if (argc < 2) {
    fprintf(stdout, "Usage: %s xx.xx.com", argv[0]);
    return E_OK;
  }
  strncpy(host_name, argv[1], 256);
  printf("Hostname: [%s]\n", host_name);

  /* To retrieve host information */
  host_entry = gethostbyname(host_name);
  if (host_entry == NULL) {
    bclerrlog(E_OSCALL, _FL_, "gethostbyname()");
    return E_FAIL;
  }
  /* To convert an Internet network address into ASCII string */
  for (int i = 0; i < host_entry->h_length; i++) {
    IPbuffer = inet_ntoa(*((struct in_addr*)host_entry->h_addr_list[i]));
    memcpy(&addr, host_entry->h_addr_list[i], sizeof(struct in_addr));
    printf("Host IP#%d: %s\t%08x\n", i, IPbuffer, addr.s_addr);
  }

  return E_OK;
}

$ cc -g getipbyhostname.c -o getipbyhostname

$ ./getipbyhostname p3-sign.douyinpic.com

Hostname: p3-sign.douyinpic.com

Host IP#0: 221.231.92.240 f05ce7dd

Host IP#1: 180.101.197.251 fbc565b4

Host IP#2: 116.207.144.248 f890cf74

Host IP#3: 58.215.47.228 e42fd73a

相关推荐
2501_9378609430 分钟前
网络核心|OSI七层、TCP/IP五层模型,封装和分用详解
网络·网络协议·tcp/ip
零依赖极客2 小时前
Day 8·1 自注意力机制:Q·K^T/softmax/V的在线计算
c语言·arm开发·人工智能·llama
M158227690552 小时前
ModbusTCP 转 Profinet 网关:上位机控制 PN 伺服方案
服务器·网络·tcp/ip
宵时待雨2 小时前
linux笔记归纳18:传输层协议TCP
linux·网络·笔记·网络协议·tcp/ip
疯狂打码的少年3 小时前
【计算机网络】UDP协议与TCP/UDP对比(面向连接vs无连接)
笔记·tcp/ip·计算机网络·udp
captain3763 小时前
▲网络原理(1)-UDP
网络·网络协议·tcp/ip
水饺编程3 小时前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio
linx2953 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
无忧.芙桃3 小时前
嵌入式(一):嵌入式历史与计算机基础:从 ENIAC 到 MCU 四大技术方向
c语言·单片机·嵌入式硬件·计算机
一只旭宝3 小时前
Python 与 C/C++ 内存模型对比总结
c语言·c++·python