python 套接字_python套接字getaddrinfo使用

本文介绍了Python中套接字的getaddrinfo函数,展示了如何利用该函数为服务器绑定端口及连接服务。通过示例代码解释了参数AI_ADDRCONFIG、AI_V4MAPPED和CANONNAME的作用,并提供了连接服务的完整代码示例。
摘要由CSDN通过智能技术生成

利用getaddrinfo()为服务器绑定端口

>>>from socket import getaddrinfo as gai

>>>gai('127.0.0.1','smtp',0,socket.SOCK_STREAM,0)

>>>[(, , 0, '', ('127.0.0.1', 25))]

使用getaddrinfo()连接服务

gai('www.baidu.com','http',0,socket.SOCK_STREAM,0,socket.AI_ADDRCONFIG|socket.AI_V4MAPPED|socket.CANONNAME)

参数:

AI_ADDRCONFIG:将会过滤掉无法连接的

AI_V4MAPPED:若本机只有IPV6,服务为IPV4,将会将IPV4地址重新编码为可用的IPV6地址

CANONNAME:将会返回DNS反向查询(ip->主机名)、但是返回的主机名是服务端自己定义的,可能是无意义的东西,例如下方百度返回的

(, , 0, 'www.a.shifen.com', ('14.215.177.38', 80))

代码中使用:

import socket

import argparse #命令行解析参数

def connect(host_ip):

try:

infolist = socket.getaddrinfo(

host_ip,

'http',

0,

socket.SOCK_STREAM,

0,

socket.AI_ADDRCONFIG|socket.AI_V4MAPPED|socket.AI_CANONNAME

)

except:

pass

info = infolist[0] # 取第一个

sock = socket.socket(*info[0:3]) # [, , 0] 前3个用于创建套接字

address = info[4] # ('14.215.177.39', 80)用于连接的ip地址

try:

sock.connect(address)

except:

pass

else:

print("连接成功,信息{}".format(info))

if __name__ == "__main__":

parser = argparse.ArgumentParser(description='connect host or ip')

parser.add_argument('hostname',)

connect(parser.parse_args().hostname)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值