python dns請求


一、DNS

 dns(domain name system)域名系統 ,主要用來把主機名轉換成ip地址。其至今能存在的原因有兩個:

  • 能使人們記住名字,而不是ip地址;
  • 允許服務器改變地址,但使用相同的名

二、socket.getaddrinfo(host,port,family=0,socketype=0,proto=0,flags=0)

  • 參數host為域名,以字符串形式給出一個ipv4/ipv6地址或者none;
  • 參數port,字符串形式就代表服務名,比如“ftp,http,https”,或者數字,或者none
  • 參數family為地址簇,AF_INET(IPV4)、AF_INET6(ipv6)、AF_UNIX
  • 參數socketype可以為socket.SOCK_STREAM(tcp),socket.SOCK_DGRAM(udp)
  • 參數proto通常為0可以直接忽略,就是指定協議。套接口所用的協議。如調用者不想指定,可用0。常用的協議有,IPPROTO_TCP(=6)和IPPTOTO_UDP(=17),它們分別對應TCP傳輸協議
  • 參數flags為AI_*的組合,比如AI_NUMERICHOST,它會影響函數的返回值 

三、dns查詢

以www.baidu.com為例

 1.dns正向查詢

1.1代碼

1 #!/usr/bin/python
2 import sys,socket
3 
4 result=socket.getaddrinfo(sys.argv[1],None)
5 print(result[1][4])

1.2結果

[root@csm testpython]# python FLdnsQuery.py www.baidu.com
('14.215.177.38', 0)

2.dns反向查詢

2.1代碼

#!/usr/bin/env python
import sys,socket
try:
 result=socket.gethostbyaddr(sys.argv[1])
 print "hostname is "+result[0]
except socket.herror,e:
 print "can't look up"

2.2結果

[root@csm testpython]# python RLdnsQuery.py 127.0.0.1
hostname islocalhost

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM