标签:
仅以此纪念学习过程!翻译和各方面会有不到位的地方。如有错误,请指出。谢谢。
#coding:utf-8 import socket """ socket()方法返回了一个socket对象。 """ def create_connection(address,timeout,source_address): """ .连接一个监听internet地址(host,port)的TCP服务,返回socket对象。这是相比socket.connect()高级的方法。 .如果hosts是一个非数字的主机名,会去连接所有可能的主机直到成功连接。使得编写兼容IPV4和IPV6的客户端变得容易。 timeout会在尝试去创建连接之前为socket实例设置超时时间。如果没有超时时间,则将会默认设置为全局默认超时时间。通过:getdefaulttimeout()来获取。 """ addrinfo=socket.getaddrinfo("example.org", 80)[0][-1] print addrinfo conn=socket.create_connection(addrinfo) print conn def getaddrinfo(host,port,family,socktype,proto,flags): """ .将host/port转化为创建一个连接到那个服务的socket所需的一个包含必要参数的5元元祖的序列。host是一个域名、一个IPv4或IPv6字符串或None。 port是一个字符串服务名类似:"http"、数字化的port或None。对于host/port为None,会转化为底层C中的Null family、sockettype、proto:是可选参数,用来筛选返回值。默认情况下,它们的值为0。意味着全部结果都被选中。 flags:可以决定结果怎样被计算和返回。flags默认值为0.例如:AI_NUMERICHOST将会不支持域名,否则会报错。 result是如以下格式的5元元组: (family,socktype,proto,canonname,sockaddr) family,socktype,proto都是integer。将会被转化为socket()方法。如果AI_CANONNAME是flags之一。canonname将会表示主机canonname的字符串。 否则canonname将会为empty。sockadd是一个描述socket地址的元祖。 如果是AF_INET则格式为:(address,port),如果为AF_INET6,则返回(address,port,flow info,scope id) example: """ print socket.getaddrinfo("example.org",80,0,0,socket.IPPROTO_TCP) print socket.getaddrinfo("www.baidu.com", "http") #port可以是"http" print socket.getaddrinfo("www.baidu.com","80") def getfqdn(name): """ .返回一个name对应的完全合格的域名。如果name被忽略,将会被解释为本地主机。为了找到合格的域名,将会检查gethostbyaddr()返回的主机名称,以及随之而来的别名。 如果可用,第一个名称将会被选中。当没有任何一个合格的域名可用时,将会把gethostname()的返回值作为返回值 """ print socket.getfqdn() print socket.getfqdn("www.baidu.com") print socket.getfqdn("example.org") def gethostbyname(hostname): """ .将hostname转化为IPv4格式的字符串。例如:100.50.200.5。如果hostname本身就是一个ipv4格式的字符串,则原值返回。 想要查看更加完整的接口:gethostbyname_ex()。 gethostbyname()不支持IPv6。 getaddrinfo()应该被用来代替ipv4/v6双重支持 """ print socket.gethostbyname("localhost") print socket.gethostbyname("example.org") print socket.gethostbyname("www.baidu.com") print socket.gethostbyname("10.2.3.6") def gethostbyname_ex(hostname): """ .将hostname转化为IPV4格式。 是gethostbyname(hostname)的一个扩展接口。 返回一个三元组(hostname,aliaslist,ipaddrlist) 这里:hostname是对应ipaddress的给定的原始主机名。 aliaslist【可能为空】是相同地址可供选择的主机名列表。ipaddrlist是相同主机相同接口对应的ipv4地址列表。 gethostbyname_ex()不支持ipv6地址。 getaddrinfo()应该被用来提供对ipv4和ipv6的支持 """ print socket.gethostbyname_ex("localhost") print socket.gethostbyname_ex("example.org") print socket.gethostbyname_ex("www.baidu.com") print socket.gethostbyname_ex("127.0.0.1") def gethostname(): """ 返回正在执行python解释器的主机名的字符串 如果想要知道当前的主机IP,可以使用:gethostbyname(gethostname())。 这个操作假设有一个有效的IP地址和主机的映射。这个假设并不总是有效。 注意:gethostname()并不总是返回完全规格的域名。应该使用getfqdn() """ print socket.gethostname() print socket.gethostbyname(socket.gethostname()) print socket.getfqdn() "推荐使用socket.getfqdn()" print socket.gethostbyname(socket.getfqdn()) def gethostbyaddr(ip_address): """ return三元组:(hostname,aliaslist,ipaddrlist) 结果和gethostbyname_ex(hostname)一致。 想要得到完全规格的主机名,需使用:getfqdn()。 gethostbyaddress()对于ipv4和ipv6都支持。 """ print socket.gethostbyaddr("127.0.0.1") def getnameinfo(sockaddr,flags): """ 将sockaddr转换为2元祖:(host,port)。由flags决定结果包含全规格的域名还是数字化的指向主机的地址。 类似的,port可以包含一个字符串端口名或数字型的端口号。 """ sockaddr=socket.getaddrinfo("127.0.0.1","90")[0][4] print socket.getnameinfo(sockaddr,socket.AI_NUMERICHOST) def getprotobyname(protocolname): """ .会将网络协议名称转化为适合传递的常数。就像socket()函数中的第三个可选的参数。 仅仅会被以SOCK_RAW模式打开的socket需要。 对于普通的socket模式,如果protocol为0或被忽略时,正确的协议会被自动选择 """ print socket.getprotobyname("icmp") #1 print socket.getprotobyname("udp") #17 print socket.getprotobyname("tcp") #16 print socket.getprotobyname("ip") #0 def getservbyname(servicename,protocolname): """ .将网络服务名和协议名转化为这个服务对应的端口号。可选的协议名为:tcp udp 或其他可以匹配的任何协议 protocolname是可选参数 """ def getservbyport(port,protocolname): """ 将网络端口号和协议名转化为那个服务的服务名。 protocolname为类似:"tcp" upd" 之类的可匹配的协议" """ def socket_test(family,type,proto): """ family、type、proto是可选的 使用给定的地址family、socket类型和协议号创建一个socket.family默认是AF_INET 或AF_INET6或AF_UNIX socket类型默认是:SOCK_STREAM。 SOCK_DGRAM 或其他SOCK_...常数之一。 proto为1或者省略。。。 1时是"ip" 协议 """ print socket.socket() def socketpair(family,type,proto): """ 返回一对使用famil、type、proto创建的已连接的socket对象。family、type、proto和socket()参数一致 默认family为AF_INET。 如果被平台拒绝的话,family默认为AF_UNIX。 这个方法适用平台:UNIX """ #print socket.socketpair() #windows上没有该方法 def fromfd(fd,family,type,proto): """ 复制文件描述符(通过file.fileno()返回的整数),并通过结果创建一个socket对象。 """ def ntoh1(x): """ .将网络上的32bit的正整数转化为主机字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个4bit的转换操作 """ def ntohs(x): """ .将网络上的16bit的正整数转化为主机字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个2bit的转换操作 """ def htonl(x): ".将本机的32bit的正整数转化为网络字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个4bit的转换操作" def htons(x): ".将主机上的16bit的正整数转化为主机字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个2bit的转换操作" def inet_atoon(ip_string): """ """ if __name__ == "__main__": """ create_connection(None,None,None) getaddrinfo(None,None,None,None,None,None) getfqdn(None) gethostbyname(None) gethostbyname_ex(None) gethostname() gethostbyaddr(None) getnameinfo(None,None) getprotobyname(None) getservbyname(None,None) socket_test(None,None,None) """
TO_BE_CONTINUED!
标签:
原文地址:http://www.cnblogs.com/lindsay-chh/p/4718284.html