python---socket模塊


僅以此紀念學習過程!翻譯和各方面會有不到位的地方。如有錯誤,請指出。謝謝。

 

#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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM