{"id":3486,"date":"2017-08-05T13:41:21","date_gmt":"2017-08-05T05:41:21","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=3486"},"modified":"2017-08-05T13:41:21","modified_gmt":"2017-08-05T05:41:21","slug":"linux%e4%b8%8b%e7%94%a8c%e8%af%ad%e8%a8%80%e9%80%9a%e8%bf%87hostname%e8%8e%b7%e5%8f%96%e5%af%b9%e5%ba%94ip","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/3486.html","title":{"rendered":"Linux\u4e0b\u7528C\u8bed\u8a00\u901a\u8fc7HOSTNAME\u83b7\u53d6\u5bf9\u5e94IP"},"content":{"rendered":"<p>=Start=<\/p>\n<h4 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u901a\u8fc7HOSTNAME\u83b7\u53d6\u5bf9\u5e94IP-\u7f18\u7531\uff1a\">\u7f18\u7531\uff1a<\/h4>\n<p>\u5b66\u4e60\u9700\u8981<\/p>\n<h4 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u901a\u8fc7HOSTNAME\u83b7\u53d6\u5bf9\u5e94IP-\u6b63\u6587\uff1a\">\u6b63\u6587\uff1a<\/h4>\n<h5 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u901a\u8fc7HOSTNAME\u83b7\u53d6\u5bf9\u5e94IP-\u53c2\u8003\u89e3\u7b54\uff1a\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n<p>\u96be\u9053\u662fstrncat\u7684bug\uff1f\u8fd8\u662f\u6545\u610f\u4e3a\u4e4b\uff1f<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_449684\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">#include &lt;stdio.h&gt;\u00a0<\/code><code class=\"java comments\">\/\/printf<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">#include &lt;string.h&gt;\u00a0<\/code><code class=\"java comments\">\/\/memset<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">#include &lt;stdlib.h&gt;\u00a0<\/code><code class=\"java comments\">\/\/for exit(0);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">#include &lt;sys\/socket.h&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">#include &lt;errno.h&gt;\u00a0<\/code><code class=\"java comments\">\/\/For errno - the error number<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">#include &lt;netdb.h&gt;\u00a0<\/code><code class=\"java comments\">\/\/hostent<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">#include &lt;arpa\/inet.h&gt;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java comments\">\/*<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java comments\">Get ip from domain name (gethostbyname)<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">int hostname_to_ip(char *\u00a0 , char *);<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">\u00a0<\/code><code class=\"java comments\">*\/<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">hostname_to_ip(<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">* hostname ,\u00a0<\/code><code class=\"java keyword\">char<\/code><code class=\"java plain\">* ip)<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">struct hostent *he;<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">struct in_addr **addr_list;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">( (he = gethostbyname( hostname ) ) == NULL) {<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror(<\/code><code class=\"java string\">\"gethostbyname\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">addr_list = (struct in_addr **) he-&gt;h_addr_list;<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">i;<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">for<\/code><code class=\"java plain\">(i =\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">; addr_list[i] != NULL; i++) {<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"strlen(ip)-1 = %d\\n\"<\/code><code class=\"java plain\">, strlen(ip)-<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">strncat(ip, inet_ntoa(*addr_list[i]), strlen(ip)-<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">);\u00a0<\/code><code class=\"java comments\">\/\/\u5728\u7b2c\u4e00\u4e2a\u5faa\u73af\u4e2dstrlen(ip)=0\uff0c\u6240\u4ee5strncat\u7684\u7b2c3\u4e2a\u53c2\u6570\u4e3a-1\uff0c\u6309\u7406\u6765\u8bf4\u5e94\u8be5\u51fa\u9519\u624d\u5bf9\uff0c\u4f46\u4e3a\u5565\u8fd8\u662f\u53ef\u4ee5\u6b63\u786e\u5b9e\u73b0\uff1f<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code><code class=\"java plain\">(addr_list[i+<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">] != NULL)<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">strncat(ip,\u00a0<\/code><code class=\"java string\">\",\"<\/code><code class=\"java plain\">,\u00a0<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"%s\\n\"<\/code><code class=\"java plain\">, inet_ntoa(*addr_list[i]));<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java value\">0<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">main(<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">argc ,\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">*argv[])<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code><code class=\"java plain\">(argc &lt;<\/code><code class=\"java value\">2<\/code><code class=\"java plain\">) {<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"Please provide a hostname to resolve.\\n\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">exit(<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">*hostname = argv[<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">];<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">ip[<\/code><code class=\"java value\">100<\/code><code class=\"java plain\">];<\/code><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">hostname_to_ip(hostname, ip);<\/code><\/div>\n<div class=\"line number46 index45 alt1\"><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"\\n%s resolved to %s\\n\"<\/code><code class=\"java plain\">, hostname, ip);<\/code><\/div>\n<div class=\"line number48 index47 alt1\"><\/div>\n<div class=\"line number49 index48 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java value\">0<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>&amp;<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_440912\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\"># gcc hostname_to_ip.c -o hostname_to_ip<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\"># .\/hostname_to_ip www.baidu.com<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">strlen(ip)-<\/code><code class=\"java value\">1<\/code>\u00a0<code class=\"java plain\">= -<\/code><code class=\"java value\">1<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java value\">220.181<\/code><code class=\"java plain\">.<\/code><code class=\"java value\">111.188<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">strlen(ip)-<\/code><code class=\"java value\">1<\/code>\u00a0<code class=\"java plain\">=\u00a0<\/code><code class=\"java value\">15<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java value\">220.181<\/code><code class=\"java plain\">.<\/code><code class=\"java value\">112.244<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">www.baidu.com resolved to\u00a0<\/code><code class=\"java value\">220.181<\/code><code class=\"java plain\">.<\/code><code class=\"java value\">111.188<\/code><code class=\"java plain\">,<\/code><code class=\"java value\">220.181<\/code><code class=\"java plain\">.<\/code><code class=\"java value\">112.244<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h5 id=\"Linux\u4e0b\u7528C\u8bed\u8a00\u901a\u8fc7HOSTNAME\u83b7\u53d6\u5bf9\u5e94IP-\u53c2\u8003\u94fe\u63a5\uff1a\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<ul>\n<li><a class=\"external-link\" href=\"http:\/\/www.binarytides.com\/hostname-to-ip-address-c-sockets-linux\/\" rel=\"nofollow\">http:\/\/www.binarytides.com\/hostname-to-ip-address-c-sockets-linux\/<\/a><\/li>\n<li><a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man3\/strcat.3.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man3\/strcat.3.html<\/a><\/li>\n<\/ul>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u5b66\u4e60\u9700\u8981 \u6b63\u6587\uff1a \u53c2\u8003\u89e3\u7b54\uff1a \u96be\u9053\u662fstrncat\u7684bug\uff1f\u8fd8\u662f\u6545\u610f\u4e3a\u4e4b\uff1f #incl [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,11,7],"tags":[100,887,176,30,886],"class_list":["post-3486","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-linux","category-programing","tag-c","tag-getaddrinfo","tag-gethostbyname","tag-linux","tag-strncat"],"views":3843,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=3486"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3486\/revisions"}],"predecessor-version":[{"id":3487,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3486\/revisions\/3487"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=3486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=3486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=3486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}