標籤:
僅以此紀念學習過程!翻譯和各方面會有不到位的地方。如有錯誤,請指出。謝謝。
#coding:utf-8import 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!
python---socket模組