【learning log】Linux network programming

DNS host entry 包含 DNS database 中有关某一 domin name 或 ip address 的 DNS 信息。

1 struct hostent{
2   char *h_name;
3   char *h_aliases;
4   int    h_addrtype;
5   int    h_length;
6   char **h_addr_list;
7 };

hostinfo 程序, 用来从 ip 或 domin name 解析 DNS info。

 1 /*This program is modified from CSAPP: hostinfo.c
 2  */
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <unistd.h>
 6 #include <string.h>
 7 #include <ctype.h>
 8 #include <setjmp.h>
 9 #include <signal.h>
10 #include <sys/time.h>
11 #include <sys/types.h>
12 #include <sys/wait.h>
13 #include <sys/stat.h>
14 #include <fcntl.h>
15 #include <sys/mman.h>
16 #include <errno.h>
17 #include <math.h>
18 #include <pthread.h>
19 #include <semaphore.h>
20 #include <sys/socket.h>
21 #include <netdb.h>
22 #include <netinet/in.h>
23 #include <arpa/inet.h>
24 #include <netinet/in.h>
25 #include <netdb.h>
26
27 void dns_error(char * msg)
28 {
29   fprintf(stderr, "%s: DNS error %d\n", msg, h_errno);
30 }
31
32 struct hostent *Gethostbyaddr(const char * addr, int len, int flag)
33 {
34   struct hostent *p;
35   if ((p = gethostbyaddr(addr, len, flag)) == NULL)
36     dns_error("Gethostbyaddr error");
37   return p;
38 }
39
40 struct hostent *Gethostbyname(const char * name)
41 {
42   struct hostent *p;
43   if ((p = gethostbyname(name)) == NULL)
44     dns_error("Gethostbyname error");
45   return p;
46 }
47
48  int main(int argc, char ** argv)
49 {
50   char **pp;
51   struct in_addr addr;
52   struct hostent *hostp;
53
54   if (argc != 2) {
55     fprintf(stderr, "usage: %s <domain name or dotted-decimal>\n",
56     argv[0]);
57     exit(0);
58     }
59   int af_inet = AF_INET;
60   if (inet_aton(argv[1], &addr) != 0)
61     hostp = Gethostbyaddr((const char *)&addr, sizeof(addr), AF_INET);
62   else
63     hostp = Gethostbyname(argv[1]);
64
65   if (hostp == NULL)
66     exit(0);
67
68   printf("official hostname: %s\n", hostp->h_name);
69
70   for (pp = hostp->h_aliases;*pp != NULL;pp++)
71     printf("alias: %s\n", *pp);
72
73   for (pp = hostp->h_addr_list;*pp != NULL; pp++) {
74      addr.s_addr = ((struct in_addr *)*pp)->s_addr;
75     printf("address: %s\n", inet_ntoa(addr));
76   }
77   exit(0);
78 }

hostinfo

【learning log】Linux network programming

时间: 2024-10-25 16:07:09

【learning log】Linux network programming的相关文章

【learning log】Qt

Qt Quick  Qt creator自带的入门 example. Qt designer 在 windows 下用起来还是很不方便,所以基本上直接用 code editor 反而更轻松.喜欢creator很重要一点就是因为它NB的代码补全.  首先我们创建一个 qt quick 工程.把资源文件放到 main.qml 所在目录,然后 qt creator 就可以自动识别资源文件.  先设置好image, 然后创建矩形,作为边框,这里背景设为透明,边框半径设为6,创造圆角效果.然后是一些对齐之

【C/C++】Linux下system()函数引发的错误

http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食  恋恋美食 发布时间: 2012/04/21 11:33 阅读: 11393 收藏: 21 点赞: 8 评论: 4 今天,一个运行了近一年的程序突然挂掉了,问题定位到是system()函数出的问题,关于该函数的简单使用在我上篇文章做过介绍: http://my.oschina.net/renhc/blog/53580 先看一下问题 简单封装了一下sys

【转载更新】Linux工具之AWK 3.高级知识

原文:http://blog.hexu.org/archives/41.shtml#id2874788 awk编程 14.1. 变量 在awk中,变量不需要定义就可以直接使用,变量类型可以是数字或字符串.赋值格式:Variable = expression,如$ awk ‘$1 ~/test/{count = $2 + $3; print count}’ test,上式的作用是,awk先扫描第一个域,一旦test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来.

【系统知识点】linux基础&优化命令

Xshell上传下载服务器的文件: yum -y install lrzsz sysstat//安装对应软件 sz XXXX//下载 rz XXXX//上传 创建用户: Useradd vrfxie //创建用户 -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录. -g 用户组 指定用户所属的主用户组. -G 用户组,用户组 指定用户所属的附加组. -s Shell文件 指定用户的登录Shell. #可以设置为/sbin

【快速查阅】Linux下启动和关闭Weblogic(管理服务器+被管服务器)

Weblogic的管理服务器和被管服务器的启动.关闭,偶尔会用到,却又不常用,导致需用时却忘记了,而又重新查阅HELP. 故,以此记录,方便查阅.执行. 首先,weblogic的启动脚本和关闭脚本都在域目录的bin文件夹下,所以,先cd到该目录 cd $WEBLOGIC_HOME/user_projects/domains/$DOMAIN_NAME/bin 然后按需要执行以下脚本: 管理服务器的启动 ./startWebLogic.sh即可 但离开命令行模式随即关闭,所以需用nohup模式 亦可

【Hadoop系列】linux SSH原理解析

本文中斜体加粗代表shell指令,操作环境 CentOS6.5 linux root免密码登录链接:[Hadoop系列]linux下 root用户免密码登录远程主机 ssh. linux 非root用户免密码登录:XXXXXXX(暂未写好) Linux下,使用ssh协议登录远程计算机.让我们先来了解下什么是SSH. 一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途

【System Log】7月14日—7月29日

本日志由系统自动生成. 从7月14日起便按照心想事成的节奏进入了实验室.打酱油.周末又去学活值班,生活的框架还是很不错的. 1.基于Hadoop的Flume,zooKeeper,这些东西算是明白了个大概. 2.第一周大概学习了javascript.jquery.css.ci框架(php)这些基本的东西,然后大概搭了个大创网站的架子出来. 3.第二周周末开始写android,答应别人要开发的一个小游戏,但是写着写着就觉得压力大写不出来. 4.中间还抽时间看了程杰的大话设计模式,和一些人ctf的wr

【转载 更新】Linux工具之AWK 2.基础知识

1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指

【转载更新】Linux工具之AWK 4.实例

======基 础 篇====== 1.无pattern的action实例 a.awk ‘{print NR $1 $NF}’data.txt   打印行号,第一列和最后一列,中间无分隔符 b.awk ‘{print $1,$NF}’ data.txt     打印第一列和最后一列,并且中间有分隔符 c.awk‘{print$0,$NF+10}’data.txt  打印整行,并打印 最后一行加上10的结果 2.有pattern的action实例 a.awk ‘/[0-9]/’ data.txt