僅以此紀念學習過程!翻譯和各方面會有不到位的地方。如有錯誤,請指出。謝謝。
#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!