In [1]:
import socket

In [2]:
infolist = socket.getaddrinfo('gatech.edu', 'www')

In [3]:
infolist


Out[3]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('130.207.160.173', 80))]

In [4]:
info = infolist[0]

In [5]:
info


Out[5]:
(<AddressFamily.AF_INET: 2>,
 <SocketKind.SOCK_STREAM: 1>,
 6,
 '',
 ('130.207.160.173', 80))

In [6]:
info[0:3]


Out[6]:
(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6)

In [7]:
s = socket.socket(*info[0:3])

In [10]:
info[4]


Out[10]:
('130.207.160.173', 80)

In [11]:
s.connect(info[4])

In [13]:
s.sendall(b'GET / HTTP/1.1\r\nHost:gatech.edu\r\n\r\n')

In [14]:
s.recv(4096)


Out[14]:
b'HTTP/1.1 301 http://www.gatech.edu/\r\nServer: Varnish\r\nLocation: http://www.gatech.edu/\r\nAccept-Ranges: bytes\r\nDate: Thu, 10 Aug 2017 13:05:10 GMT\r\nX-Varnish: 225129802\r\nAge: 0\r\nVia: 1.1 varnish\r\nConnection: close\r\nX-Cache: MISS\r\n\r\n'

In [15]:
infolist = socket.getaddrinfo('google.com', 'www')

In [17]:
infolist


Out[17]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('216.58.203.206', 80)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('2404:6800:4009:802::200e', 80, 0, 0))]

In [18]:
sock_ipv6 = socket.socket(*infolist[1][0:3])

In [19]:
sock_ipv6


Out[19]:
<socket.socket fd=54, family=AddressFamily.AF_INET6, type=SocketKind.SOCK_STREAM, proto=6, laddr=('::', 0, 0, 0)>

In [20]:
# Using getaddrinfo() to Bind Your Server to a Port

In [21]:
from socket import getaddrinfo

In [23]:
getaddrinfo(None, 'smtp', 0, socket.SOCK_STREAM, 0, socket.AI_PASSIVE)


Out[23]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('0.0.0.0', 25)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('::', 25, 0, 0))]

In [25]:
getaddrinfo(None, 53, 0, socket.SOCK_DGRAM, 0, socket.AI_PASSIVE)


Out[25]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_DGRAM: 2>,
  17,
  '',
  ('0.0.0.0', 53)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_DGRAM: 2>,
  17,
  '',
  ('::', 53, 0, 0))]

In [26]:
#  binding to localhost

In [27]:
getaddrinfo('127.0.01', 'smtp', 0, socket.SOCK_STREAM,0)


Out[27]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('127.0.0.1', 25))]

In [28]:
getaddrinfo('127.0.0.1', 53, 0, socket.SOCK_DGRAM, 0)


Out[28]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_DGRAM: 2>,
  17,
  '',
  ('127.0.0.1', 53))]

In [38]:
getaddrinfo('localhost', 443, 0, socket.SOCK_STREAM, 0)


Out[38]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('127.0.0.1', 443))]

In [39]:
getaddrinfo('localhost', 8080, 0, socket.SOCK_STREAM, 0)


Out[39]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('127.0.0.1', 8080))]

In [40]:
getaddrinfo('localhost', 'smtp', 0, socket.SOCK_STREAM,0)


Out[40]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('127.0.0.1', 25))]

In [41]:
''' Using getaddrinfo() to Connect to a Service
AI_ADDRCONFIG flag filters out any addresses that are impossible for your computer to reach. 
AI_V4MAPPED return the IPv4 addresses reencoded as IPv6 addresses that you can actually use '''


Out[41]:
' Using getaddrinfo() to Connect to a Service\nAI_ADDRCONFIG flag filters out any addresses that are impossible for your computer to reach. \nAI_V4MAPPED return the IPv4 addresses reencoded as IPv6 addresses that you can actually use '

In [43]:
getaddrinfo('ftp.mozilla.org', 'ftp', 0, socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG | socket.AI_V4MAPPED)


Out[43]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('54.230.78.219', 21))]

In [44]:
getaddrinfo('iana.org', 'www', 0, socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG | socket.AI_V4MAPPED)


Out[44]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('192.0.43.8', 80)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('2001:500:88:200::8', 80, 0, 0))]

In [45]:
getaddrinfo('iana.org', 'www', 0, socket.SOCK_STREAM, 0)


Out[45]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('192.0.43.8', 80)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('2001:500:88:200::8', 80, 0, 0))]

In [46]:
# Asking getaddrinfo() for a Canonical Hostname

In [50]:
getaddrinfo('iana.org', 'www', 0, socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG | socket.AI_V4MAPPED| socket.AI_CANONNAME)


Out[50]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  'iana.org',
  ('192.0.43.8', 80)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('2001:500:88:200::8', 80, 0, 0))]

In [51]:
getaddrinfo('google.com', 'www', 0, socket.SOCK_STREAM, 0, socket.AI_CANONNAME)


Out[51]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  'google.com',
  ('216.58.220.14', 80)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('2607:f8b0:4002:810::200e', 80, 0, 0))]

In [52]:
# to resolve those fancy new domain names that have Unicode characters in them.

In [57]:
getaddrinfo('中央大学.tw', 'www', 0, socket.SOCK_STREAM, 0,socket.AI_ADDRCONFIG | socket.AI_V4MAPPED)


Out[57]:
[(<AddressFamily.AF_INET: 2>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('140.115.17.82', 80)),
 (<AddressFamily.AF_INET6: 10>,
  <SocketKind.SOCK_STREAM: 1>,
  6,
  '',
  ('2001:288:3001:17::82', 80, 0, 0))]

In [58]:
'中央大学.tw'.encode('idna')


Out[58]:
b'xn--fiq80yua78t.tw'

In [59]:
socket.gethostbyname('xn--fiq80yua78t.tw')


Out[59]:
'140.115.17.82'

In [60]:
# Primitive Name Service Routines

In [61]:
socket.gethostname()


Out[61]:
'gaurav-HP-Notebook'

In [62]:
socket.getfqdn()


Out[62]:
'gaurav-HP-Notebook'

In [3]:
socket.gethostbyname('google.com')


Out[3]:
'216.58.220.14'

In [4]:
socket.gethostbyaddr('216.58.220.14')


Out[4]:
('bom05s05-in-f14.1e100.net', [], ['216.58.220.14'])

In [5]:
socket.gethostbyname('cern.ch')


Out[5]:
'188.184.9.234'

In [6]:
socket.gethostbyaddr('188.184.9.234')


Out[6]:
('webrlb01.cern.ch', [], ['188.184.9.234'])

In [7]:
socket.getprotobyname('UDP')


Out[7]:
17

In [11]:
socket.getprotobyname('tcp')


Out[11]:
6

In [13]:
socket.gethostbyname(socket.getfqdn())


Out[13]:
'127.0.1.1'

In [ ]: