获取本机的主机名
socket.gethostname()
hostname = socket.gethostname()
print('hostname:', hostname, 'type:', hostname.__class__)
# hostname: hardy_sap type: <class 'str'>
获取指定主机的IP
socket.gethostbyname()
ip = socket.gethostbyname('www.baidu.com')
print('IP:', ip, 'type:', ip.__class__)
# IP: 183.232.231.172 type: <class 'str'>
socket.gethostbyname_ex()
gethostbyname
的扩展版,返回一个包含三元素的元组,·
分别是:
[0]
: 给定主机名的主要的主机名
[1]
: 一个主机名的别名列表
[2]
: 同一台主机同一个接口的其他IP地址的列表
ip_tp = socket.gethostbyname_ex('www.baidu.com')
print(ip_tp)
# ('www.a.shifen.com', ['www.baidu.com'], ['183.232.231.172', '183.232.231.174'])
获取指定主机的地址信息
socket.getaddrinfo()
addrinfo = socket.getaddrinfo('www.baidu.com', 80)
print('addrinfo:', addrinfo)
# addrinfo: [(<AddressFamily.AF_INET: 2>, 0, 0, '', ('183.232.231.172', 80)), (<AddressFamily.AF_INET: 2>, 0, 0, '', ('183.232.231.174', 80))]
获取服务使用的端口
socket.getservbyname()
port = socket.getservbyname('ftp', 'tcp')
print('ftp:', port)
# ftp: 21
获取端口对应的服务名
socket.getservbyport()
service = socket.getservbyport(21, 'tcp')
print(21, service)
# 21 ftp
字符IP转换成字节
socket.inet_aton()
bys = socket.inet_aton('127.0.0.1')
print(bys)
# b'\x7f\x00\x00\x01'
IP字节转换成字符IP
socket.inet_ntoa()
ip = socket.inet_ntoa(bys)
print(ip)
# 127.0.0.1
getsockname与getpeername
getsockname()
,获取本机地址
getpeername()
,获取对端地址
sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
sk.connect(('www.baidu.com', 80))
print('本机地址sockname:', sk.getsockname()) # ('192.168.1.103', 58895)
print('对端地址peername:', sk.getpeername()) # ('183.232.231.172', 80)
整体代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""socket模块其它方法学习
socket.gethostname()
socket.gethostbyname()
socket.gethostbyname_ex()
socket.getaddrinfo()
socket.getservbyname()
socket.getservbyport()
socket.inet_aton()
socket.inet_ntoa()
sk.getpeername()
sk.getsockname()
"""
import socket
# 获取本机的主机名
hostname = socket.gethostname()
print('hostname:', hostname, 'type:', hostname.__class__)
# 获取指定主机的IP
ip = socket.gethostbyname('www.baidu.com')
print('IP:', ip, 'type:', ip.__class__)
# gethostbyname的扩展版
# 返回一个包含三元素的元组,
# 分别是:
# [0]: 给定主机名的主要的主机名
# [1]: 一个主机名的别名列表
# [2]: 同一台主机同一个接口的其他IP地址的列表
ip_tp = socket.gethostbyname_ex('www.baidu.com')
print(ip_tp)
# 获取指定主机的地址信息
addrinfo = socket.getaddrinfo('www.baidu.com', 80)
print('addrinfo:', addrinfo)
# 获取服务使用的端口
port = socket.getservbyname('ftp', 'tcp')
print('ftp:', port)
# 获取端口对应的服务名
service = socket.getservbyport(21, 'tcp')
print(21, service)
# 字符IP转换成字节
bys = socket.inet_aton('127.0.0.1')
print(bys)
# IP字节转换成字符IP
ip = socket.inet_ntoa(bys)
print(ip)
# getsockname与getpeername
sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
sk.connect(('www.baidu.com', 80))
print('本机地址sockname:', sk.getsockname()) # ('192.168.1.103', 58895)
print('对端地址peername:', sk.getpeername()) # ('183.232.231.172', 80)