如何解析编译一个静态二进制文件,其代码包含一个函数gethostbyname,如果编译时没有像这样的警告:
警告:在静态链接的应用程序中使用'gethostbyname'需要在运行时从用于链接的glibc版本中获取共享库
我使用命令在ubuntu 12.04上编译:
$ gcc -static lookup.c -o lookup
Run Code Online (Sandbox Code Playgroud)
这是lookup.c的代码:
/* lookup.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
extern int h_errno;
int main(int argc,char **argv) {
int x, x2;
struct hostent *hp;
for ( x=1; x<argc; ++x ) {
hp = gethostbyname(argv[x]);
if ( !hp ) {
fprintf(stderr,
"%s: host '%s'\n",
hstrerror(h_errno),
argv[x]);
continue;
}
printf("Host %s : \n" ,argv[x]);
printf(" Officially:\t%s\n", hp->h_name);
fputs(" Aliases:\t",stdout);
for …Run Code Online (Sandbox Code Playgroud) 我想在我的程序中这样做:
dest = socket.gethostbyname(host)
Run Code Online (Sandbox Code Playgroud)
我已经包括这条线:
from socket import *
Run Code Online (Sandbox Code Playgroud)
在文件的开头.
我收到此错误:
AttributeError:类型对象'_socketobject'没有属性'gethostbyname'
我正在运行Vista 64bit.我的操作系统有问题吗?我拒绝了我的防火墙和一切.
我不知道如何用C编写应用程序,但我需要一个小程序:
lh = gethostbyname("localhost");
output = lh->h_name;
Run Code Online (Sandbox Code Playgroud)
输出变量将被打印.
以上代码用于PHP MongoDB数据库驱动程序以获取计算机的主机名(主机名是输入的一部分,用于生成唯一ID).我怀疑这将返回主机名,所以我想要一些证据.
任何代码示例都会非常有用.
愉快的一天.
我使用此代码段时,我发现在http://www.kutukupret.com/2009/09/28/gethostbyname-vs-getaddrinfo/执行DNS查询
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[ ]) {
struct hostent *h;
/* error check the command line */
if(argc != 2) {
fprintf(stderr, "Usage: %s hostname\n", argv[0]);
exit(1);
}
/* get the host info */
if((h=gethostbyname(argv[1])) == NULL) {
herror("gethostbyname(): ");
exit(1);
}
else
printf("Hostname: %s\n", h->h_name);
printf("IP Address: %s\n", inet_ntoa(*((struct in_addr *)h->h_addr)));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我面临着一个奇怪的事实
./test www.google.com
Hostname: www.l.google.com
IP …Run Code Online (Sandbox Code Playgroud) 任何人都遇到此事:
更新DNS记录后..我对'test.somedomain.com'进行挖掘,得到167.69.143.234,但是当我执行socket.gethostbyname('test.somedomain.com')时,我得到167.69.6.234.
我猜socket仍在使用缓存......我该如何清除它?还是冲洗它?
我的代码非常简单:
Linux Termianl
dig test.somedomain.com
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
import socket
socket.gethostbyname('test.somedomain.com')
Run Code Online (Sandbox Code Playgroud)
它应该返回167.69.143.234地址,因为它是DNS中更新的地址.
在MSDN上,它提到GetHostByName已经过时了.替换是GetHostEntry.它们有什么区别?
在winsock中查看异步地址解析似乎只有两个选项要么gethostbyname在单独的线程上使用阻塞,要么使用WSAAsyncGetHostByName.后者的设计是出于某种原因使用窗口消息,而不是重叠操作和完成端口/例程.
是否有任何版本的gethostbyname异步操作以与winsock API的其余部分类似的方式与重叠操作异步工作?
我不能gethostbyname用来获取主机的IP地址,这是一个不推荐使用的功能,只能在Windows上工作10%的时间!
我找不到任何足够的资源来寻找使用其他功能查找主机IP地址的其他方法(建议使用MSDN,getaddrinfo但这似乎不是我想要的.)
以下代码在windows下的node.js中生成异常:
var Socket = require("net").Socket;
socket = new Socket();
socket.connect(80, "localhost");
Run Code Online (Sandbox Code Playgroud)
这是消息:
events.js:2083: Uncaught Error: getHostByName ENOTFOUND
Run Code Online (Sandbox Code Playgroud)
当我删除localhost,它工作正常.可能是什么导致了这个?我尝试关闭防火墙,但没有效果.
我gethostbyname()用来获取应用程序中域的IP地址.
在某些情况下,也检查无效地址,如'50 .9.49'.
echo gethostbyname('50.9.49'); // returns 50.9.0.49
Run Code Online (Sandbox Code Playgroud)
在这种情况下gethostbyname应该返回false或未修改的无效IP地址.但是这些函数返回修改后的IP地址50.9.0.49.
看起来像PHP中的错误.快速解决方案似乎是检查无效的数字地址之前,还有其他建议吗?