使用C語言獲取指定網域名稱的IP

2021-06-25 15:18:34 字數 1216 閱讀 1546

最近正在學習使用c語言傳送電子郵件,但是傳送郵件需要連線到smtp伺服器,c語言只支援連線ip,而不支援連線網域名稱,那麼就需要將smtp位址轉換成ip位址了。雖然我們可以使用dos命令中的ping命令來將smtp伺服器的ip位址轉換出來,但這並不是我的本意。在網上找貼半天,實在是讓人無語。最後,自己終於研究出來,故發表出來,希望能夠幫助到大家。

如果要將乙個網域名稱轉換成乙個ip位址,需要使用到winsock中的函式gethostbyname。相反,如果我們想將乙個ip位址轉換成乙個網域名稱,則使用gethostbyaddr。今天,我們主要來詳細講解gethostbyname。

struct hostent far *pascal far gethostbyname(const

char

far * name);

其中,name指的是指向乙個網域名稱的指標,該函式返回的是乙個hostent型的結構體。

結構體定義如下:

struct

hostent

;

hostent->h_name

指的是主機的規範名,例如www.google.com.hk的規範名其實是www-wide.l.google.com

hostent->h_aliases

指的是主機的別名,例如www.google.com.hk就是google他自己的別名,有時候,有的主機有好幾個別名,這些其實都是為了易於使用者的記憶而為自己的**多取的名字

hostent->h_addrtype

指的是主機ip位址的型別,可能是ipv4(af_inet)或者是ipv6(af_inet6)

hostent->h_length

指的是主機ip位址的長度,如果是ipv4,則是4

hostent->h_addr_list

表示主機的ip位址,需要使用inet_ntoa轉換成字串格式的ip位址。ip位址可能有1——更多個。

inet_ntoa函式將乙個ip轉換成乙個網際網路標準點分格式的字串。

char far * inet_ntoa( struct in_addr in);
注意:如果使用inet_ntoa轉換hostent->h_addr_list,需要強制轉換成struct in_addr *格式。

下面是源**例程

char * smtpip(char *url)}}

注意:在呼叫任何winsock函式之前,必須先呼叫wsastartup函式

如何用 C 批量獲取網域名稱 IP

有一批網域名稱,由於前期管理混亂,現在已經不知道哪些網域名稱是指向了我們的伺服器 ip,哪些已經指向了別的伺服器 ip,現想把未指向我們伺服器 ip 的網域名稱剔出來。這裡用 vc asp.net 類似。放乙個文字框 textbox1,multiline 為 true。引用命名空間 system.n...

從指定DNS伺服器查詢指定網域名稱的ip

需要從指定dns伺服器查詢出網域名稱對應的ip位址 host 網域名稱 dns伺服器ip位址例如 www.a.shifen.com has address 183.232.231.172 先檢視本地路由配置 netstat nr 新增路由規則 route add net 10.0.0.0 192.1...

獲取指定IP的終端的MAC位址

因為業務需要,需要給公司部分終端進行登記,以保證授權終端能夠登入業務系統,最好的方法就是記錄下每台終端的mac位址來進行驗證是否有授權。dllimport iphlpapi.dll public static extern int sendarp int32 dest,int32 host,ref ...