展开

关键词

关于 getsockname、getpeername和gethostname、gethostbyname

一、gethostname,gethostbyname的用法这两个函数可以用来获取主机的信息。 gethostname:获取主机的名字gethostbyname:通过名字获取其他的信息(比如ip) 1.gethostname:man手册里面的解释(部分):        #include        On error, -1 is returned, and errno is       set appropriately. 2.gethostbyname:        #include        extern int h_errno;       struct hostent *gethostbyname(const char *name);可以看到获取的内容保存在一个指针里面。 (myhost = gethostbyname(host))) { perror(gethostbyname); return -2; } int i = 0; while(myhost && myhost

47950

linux网络编程之socket(七):一个进程发起多个连接和gethostbyname等函数

一、在前面讲过的最简单的回射客户/服务器程序中,一个客户端即一个进程,只会发起一个连接,只要稍微修改一下就可以让一个客户端发起多个连接,然后只利用其中一个连接发...

50400
  • 广告
    关闭

    11.11智惠云集

    2核4G云服务器首年70元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    域名转化到IP地址的实现

    在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname()、gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化。 其中gethostbyname()是将主机名转化为IP地址,gethostbyaddr()则是逆操作,是将IP地址转化为主机名。    函数原型:1 #include 2 3 struct hostent* gethostbyname(const char* hostname);4 5 struct hostent* gethostbyaddr 即32位*12 13 char **h_addr_list; *主机的IP地址列表*14 15 }16 17 #define h_addr h_addr_list *保存的是ip地址*      函数gethostbyname 结果存在hptr结构中 *22 23 if((hptr = gethostbyname(ptr)) == NULL)24 25 {26 27 printf( gethostbyname error for

    42420

    UNPv1第九章:基本名字与地址转换

    1.gethostbyname查找主机名最基本的函数是gethostbyname,如果成功,它返回一个指向结构hostent的指针,该结构中包含了该主机的所有IPv4或IPv6地址#includestruct hostent *gethostbyname(const char *hostname);hostent结构如下:struct hostent{ char *h_name;official name of address: 4 or 16 char * *h_addr_list;};2.gethosybyaddr函数gethostbyaddr取一个二进制IP地址并试图找到相应于此地址的主机名,这与gethostbyname 3.uname函数返回当前主机名字,通常和gethostbyname一起用来确定本地主机的IP地址#include int uname (struct utsname *name); 返回:非负值——成功 version;当前发布版本 char machine;硬件类型}获取IP方法:struct utsname myname;uname(&myname);struct hostent *hptr = gethostbyname

    19730

    Swoole v4.7 版本预览之支持 c-ares

    默认不开启,如需开启,需要在编译 Swoole 时增加 --enable-cares 参数gethostbyname在之前的版本中 CoroutineSystem::gethostbyname 是基于同步的线程池模拟实现 SwooleCoroutineSystem::dnsLookup(string $domain, float $timeout = 5): string|false 与 CoroutineSystem::gethostbyname 不同,CoroutineSystem::dnsLookup 是基于 CoSocket UDP 客户端自行实现的 DNS 协程客户端,底层是异步 IO,而不是使用 libc 提供的 gethostbyname strace 日志use SwooleCoroutineSystem;use function SwooleCoroutinerun; run(function () { $ip = System::gethostbyname

    12240

    Linux漏洞分析入门笔记-CVE-2015-0235

    Ubuntu 12.04 32位ida 7.00x00:漏洞描述1.glibc的__nss_hostname_digits_dots存在缓冲区溢出漏洞,导致使用gethostbyname系列函数的某些软件存在代码执行或者信息泄露的安全风险 通过gethostbyname()函数或gethostbyname2()函数,将可能产生一个堆上的缓冲区溢出。 第二次断下,发现gethostbyname的参数为我们输入的参数。Gethostbyname中调用__nss_hostname_digits_dots,其中缓冲区的大小默认为0x400。 0x02:总结1.产生漏洞的条件是当gethostbyname()函灵敏被调用时且满足下面两个条件。a.size_need足够大,让其调用realloc重新分配。b.name全为数字或者.号

    29310

    Python:gethostbyname获取本地ip地址

    gethostbyname和gethostbyname_ex均是socket模块中的一个函数,都可用于来获取本地ip地址。 gethostbyname函数获取本地ip地址>>>impoert socket>>> socket.gethostbyname(socket.gethostname())116.196.107.126 socket.gethostname())(jd.svr.lianst.com, )>>> socket.gethostbyname_ex(socket.gethostname())从上面两个例子里面可以看出来,gethostbyname

    1.1K90

    python IPscan查找IP主机

    python IPscan查找ip主机(仅供学习)from socket import gethostbyname def Miscript(): printa== target = raw_input (.Enter the Host: ) targetIP = gethostbyname(target) print a-Target IP ===>, targetIP print +--------

    12620

    微信开源 libco :简单易用高性能的协程库

    gethostbyname 的 Hook 方法对于现网服务,有可能需要通过系统的 gethostbyname API 接口去查询 DNS 获取真实地址。 我们在协程化改造的时候,发现我们 hook 的 socket 族函数对 gethostbyname 不适用,当一个协程调用了 gethostbyname 时会同步等待结果,这就导致了同线程内的其它协程被延时执行 最终gethostbyname协程异步化是通过Hook __poll方法以及定义协程私有变量解决的。 gethostbyname 是 glibc 提供的同步查询 dns 接口,业界还有很多优秀的 gethostbyname 的异步化解决方案,但是这些实现都需要引入一个第三方库并且要求底层提供异步回调通知机制 libco 通过 hook 方法,在不修改 glibc 源码的前提下实现了的 gethostbyname 的异步化。

    2.2K10

    揭秘:微信是如何用libco支撑8亿用户的

    gethostbyname的Hook方法对于现网服务,有可能需要通过系统的gethostbyname API接口去查询DNS获取真实地址。 我们在协程化改造的时候,发现我们hook的socket族函数对gethostbyname不适用,当一个协程调用了gethostbyname时会同步等待结果,这就导致了同线程内的其它协程被延时执行。 最终gethostbyname协程异步化是通过Hook poll方法以及定义协程私有变量解决的。 gethostbyname是glibc提供的同步查询dns接口,业界还有很多优秀的gethostbyname的异步化解决方案,但是这些实现都需要引入一个第三方库并且要求底层提供异步回调通知机制。 libco通过hook方法,在不修改glibc源码的前提下实现了的gethostbyname的异步化。

    51550

    揭秘:微信如何用 libco 支撑8亿用户?

    gethostbyname 的 Hook 方法对于现网服务,有可能需要通过系统的 gethostbyname API 接口去查询 DNS 获取真实地址。 我们在协程化改造的时候,发现我们 hook 的 socket 族函数对 gethostbyname 不适用,当一个协程调用了 gethostbyname 时会同步等待结果,这就导致了同线程内的其它协程被延时执行 最终 gethostbyname 协程异步化是通过 Hook _poll 方法以及定义协程私有变量解决的。 gethostbyname 是 glibc 提供的同步查询 dns 接口,业界还有很多优秀的 gethostbyname 的异步化解决方案,但是这些实现都需要引入一个第三方库并且要求底层提供异步回调通知机制 libco 通过 hook 方法,在不修改 glibc 源码的前提下实现了的 gethostbyname 的异步化。

    1.1K11

    Python获取局域网内所有机器IP地址与网卡MAC地址

    import osfrom socket import gethostbyname, gethostname# 获取本机IP地址host = gethostbyname(gethostname())#

    2K90

    CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法

    下面是我转载的检测和修复方法,我个人服务器 Centos 6.5 已成功修复:----一、漏洞概述20150128【CVE 2015-0235: GNU glibc gethostbyname 缓冲区溢出漏洞 这个 bug 可以通过 gethostbyname *()函数来触发,本地和远程均可行。该漏洞(幽灵漏洞)造成了远程代码执行,攻击者可以利用此漏洞远程获取系统进程当前的权限。 出现了什么漏洞代码审计公司 Qualys 的研究人员在 glibc 库中的 __nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个 bug 可以经过 gethostbyname 应用程序主要使用 gethostbyname*()函数发起 DNS 请求,这个函数会将主机名称转换为 ip 地址。

    94240

    PHP 获取服务器详细信息的原生方法

    DEFAULT_INCLUDE_PATH获取当前文件绝对路径:    __FILE__获取Http请求中Host值:    $_SERVER          (返回值为域名或IP)获取服务器IP:            GetHostByName ($_SERVER)接受请求的服务器IP:      $_SERVER            (有时候获取不到,推荐用:GetHostByName($_SERVER))获取客户端IP:

    19000

    Python中接口定义和依赖注入

    Interface from zope.interface import implementer import socket class IHostNameResolver(Interface): def getHostByName implementer(IHostNameResolver)(HostNameResolver) @implementer(IHostNameResolver) class HostNameResolver: def getHostByName    from zope.interface import implementer   import socket   class IHostNameResolver(Interface):   def getHostByName IHostNameResolver)(HostNameResolver) @implementer(IHostNameResolver)   class HostNameResolver:   def getHostByName

    25420

    关于DNS不得不说的一些事(上)

    下面我们着重来说DNS解析这块 如图所示,大致就是:浏览器输入地址,然后浏览器这个进程去调操作系统某个库里的gethostbyname函数(例如,Linux GNU glibc标准库的gethostbyname 例如(1)我们在用chrome浏览器的时候,其实会先去浏览器的dns缓存里头查询,dns缓存中没有,再去调用gethostbyname函数(2)gethostbyname函数在试图进行DNS解析之前首先检查域名是否在本地

    10640

    Linux glibc幽灵漏洞测试与修复方法

    一、Linux glibc幽灵漏洞简介2015年1月28日互联网上爆出Linux glibc幽灵漏洞(glibc gethostbyname buffer overflow,http:seclists.orgoss-sec2015q1274 ),也有人将其称之为“20150127GHOST gethostbyname() heap overflow in glibc”,在CVE上的漏洞编号是CVE-2015-0235。

    50720

    协程取消 API 的示例代码

    socketAsyncIO (fread, gethostbyname ...)sleepwaitSignalwaitwaitpidwaitEventCo::suspendCo::yieldchannelnative Event::defer(function () use ($cid) { assert(Coroutine::cancel($cid) === true); }); $retval = System::gethostbyname

    8530

    Swoole v4.6.0 版本发布,支持原生 curl 协程客户端

    rshutdown() 标记为已弃用,请改用 Coroutinerun在之前的版本中,如果在index.php中直接使用go创建协程go(function () { var_dump(CoSystem::gethostbyname deprecated in Unknown on line 0 推荐使用Coroutinerun来代替这种方式:SwooleCoroutinerun(function () { var_dump(CoSystem::gethostbyname (www.baidu.com));}); SwooleCoroutinerun(function () { go(function () { var_dump(CoSystem::gethostbyname (www.baidu.com)); }); go(function () { var_dump(CoSystem::gethostbyname(www.zhihu.com)); });}); 默认启用

    73830

    幽灵漏洞(GHOST)影响大量Linux操作系统及其发行版(更新修复方案)

    漏洞概述代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过gethostbyname*()函数被本地或者远程的触发 应用程序主要使用gethostbyname*()函数发起DNS请求,这个函数会将主机名称转换为ip地址。

    51380

    扫码关注云+社区

    领取腾讯云代金券