日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python實現socket庫網絡通信套接字

瀏覽:2日期:2022-06-17 14:40:42
目錄Socket網絡通信套接字什么是套接字?地址簇套接字類型套接字的簡單應用gethostbyname_ex()與gethostbyname()getservbyname()與getservbyport()getprotobyname()getaddrinfo(查找服務器地址)IP地址的表示方式inet_pton()與inet_ntop()

Socket 套接字:通訊端點 簡介

socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,對于文件用【打開】【讀寫】【關閉】模式來操作。socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉)。

Socket 是任何一種計算機網絡通訊中最基礎的內容。Socket通訊一般用戶C/S結構系統的網絡通訊。

Socket 網絡通訊是基于TCP(傳輸控制協議)或UDP(用戶數據報協議)兩種協議通訊,所以有 面向連接(TCP )與無連接(UDP ) 兩種通訊方式。

Python 要創建TCP 套接字就得在創建的時候,指定套接字類型為SOCK_STREAM,它使用 TCP/IP通訊協議。

Socket網絡通信套接字

socket庫提供了一個底層C API,可以使用BSD套接字接口實現網絡通信。它包括socket類,用于處理具體的數據通道,還包括用來完成網絡相關任務的函數,如將一個服務器名轉換為一個地址以及格式化數據以便在網絡上發送。

什么是套接字?

套接字是程序在本地或者通過互聯網來回傳遞數據時所用通信通道的一個端點。

套接字有2個主要屬性用于控制如何發送數據:地址簇(address family)控制所用的OSI網絡層協議;套接字類型(socket type)控制傳輸層協議。(參考《計算機網絡》7層協議)

地址簇

Python支持3個地址簇:

AF_INET:用于IPv4尋址。IPv4長度為4個字節,通常表示為4個數的序列,每個字節對應一個數,用點號分割(如121.63.0.243)。這些值通常被稱為IP地址。目前IPv4依舊還是主流。 AF_INET6:用于IPv6尋址。目前IPv6已經小范圍應用,它支持128位地址和通信流調整,還支持IPv4不支持的一些路由特性。 AF_UNIX:用于UNIX域套接字(UDS)的地址簇,這是一種POSIX兼容系統上的進程間通信協議。UDS的實現通常允許操作系統直接從進程向進程間傳遞數據,而不用通過網絡棧。這比使用AF_INET更高效,但是由于要用到文件系統作為尋址的命令空間,所以UDS僅限于同一個系統上的進程。套接字類型

套接字類型有兩種:

SOCK_DGRAM:面向消息的數據報傳輸,數據報套接字通常與UDP關聯,即用戶數據報協議。這些套接字能提供不可靠的消息傳送。 SOCK_STREAM:面向流的傳輸,與TCP相關,即傳輸控制協議。它們可以在客戶和服務器之間提供字節流,通過超時管理,重傳和其他特性確保提供消息傳送或失敗通知。

大多數應用協議(如HTTP)都建立在TCP基礎上,因為這樣更容易創建自動處理消息排序和傳送的復雜應用。

UDP通常用于順序不太重要的協議(如DNS交換)。UDP與TCP都支持IPv4與IPv6。

套接字的簡單應用gethostbyname_ex()與gethostbyname()

socket庫包含一些與網絡上的域名服務交互的函數,比如解析域名為IP地址可以用到gethostbyname_ex(),示例如下:

import sockethost_str = [ ’www.baidu.com’, ’cloud.tencent.com’, ’www.csdn.net’]for host in host_str: try:name, aliases, addresses = socket.gethostbyname_ex(host)print(host)print('主機名:', name)print('所有別名:', aliases)print('所有可用IP地址:', addresses) except socket.error as msg:print(host, msg)

運行之后,效果如下:

Python實現socket庫網絡通信套接字

gethostbyname_ex:該函數返回3個參數,主機名,別名,以及解析能跳轉到當前主機的IP地址。

gethostbyname:類似的函數,只返回當前主機的IP地址。

getservbyname()與getservbyport()

socket庫提供getservbyname()函數用于查找網絡服務的端口號和標準名,示例如下所示:

import socketfrom urllib.parse import urlparseurl_str = [ ’https://www.baidu.com’, ’https://www.csdn.net’, ’smtp://smtp.qq.com’,]for url in url_str: try:parsed_url = urlparse(url)port = socket.getservbyname(parsed_url.scheme)print(url)print('端口號:', port) except socket.error as msg:print(url, msg)

運行之后,效果如下:

Python實現socket庫網絡通信套接字

當然,其實最有用的并不是給定一個鏈接去查詢端口號,而是逆向操作。(因為標準化服務端口號一般都是固定的)

socket庫提供getservbyport()函數用于完成逆向的服務端口查找,示例代碼如下所示:

import socketurl = ’{}://smtp.qq.com’.format(socket.getservbyport(25))print(url)

運行之后,效果如下:

Python實現socket庫網絡通信套接字

getprotobyname()

socket庫還可以使用getprotobyname()函數獲取分配給一個傳輸協議的端口號,示例如下:

import socket#獲取匹配開頭字符串的所有屬性值def getConstants(prefix): return {getattr(socket, n): nfor n in dir(socket)if n.startswith(prefix) }ipproto_str = getConstants('IPPROTO_')for agree in [’tcp’, ’udp’]: num = socket.getprotobyname(agree) name = ipproto_str[num] print(name, num)

運行之后,效果如下:

Python實現socket庫網絡通信套接字

對于協議碼,在程序定義中一般都是標準化常量,這就是意味著,它們的常量名都有一定的規律,而socket協議碼前綴是IPPROTO_。

getaddrinfo(查找服務器地址)

getaddrinfo()函數用于將一個服務的基本地址轉換為一個元組列表,其中包含建立一個連接所需要的全部信息。比如其網絡簇與協議等,示例如下:

import socket# 獲取匹配開頭字符串的所有屬性值def getConstants(prefix): return {getattr(socket, n): nfor n in dir(socket)if n.startswith(prefix) }ipproto_str = getConstants('IPPROTO_')family_str = getConstants('AF_')type_str = getConstants('SOCK_')for response in socket.getaddrinfo(’www.csdn.net’, ’http’, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=socket.IPPROTO_TCP, flags=socket.AI_CANONNAME): family, socktype, ipproto, canonname, sockaddr = response print('地址簇: ', family_str[family]) print('套接字類型: ', type_str[socktype]) print('協議碼: ', ipproto_str[ipproto]) print('主機規范名: ', canonname) print('ip地址與端口號:', sockaddr)

運行之后,效果如下:

Python實現socket庫網絡通信套接字

這里如果只用socket.getaddrinfo(‘www.csdn.net’, ‘http’),表示不需要過濾任何連接信息,但大型的網站一般都有幾個IP或者域名跳轉到主頁的。

所以通過后面的參數,可以篩選自己需要的鏈接信息。

其中,最后一個參數socket.AI_CANONNAME表示如果主機有別名,那么結果中會包含服務器的標準名。所有沒有這個標志,標準名為空。

IP地址的表示方式

如果讀者有C的經驗,那么肯定知道,通過C語言編寫的套接字程序是使用struct sockaddr結構體,它將IP地址表示為二進制,而不是上面顯示的Python字符串形式。

如果想在Python和C之間轉換IPv4地址,可以使用inet_aton()和inet_ntoa()。示例如下:

import socketimport binasciiip_list = [ '192.168.50.1', '127.0.0.1']for ip in ip_list: packed = socket.inet_aton(ip) print('原始字符串ip地址:', ip) print('C庫能識別的ip地址', binascii.hexlify(packed)) print('還原C庫ip地址字符串', socket.inet_ntoa(packed)) print()

運行之后,效果如下:

Python實現socket庫網絡通信套接字

inet_pton()與inet_ntop()

相信讀者如果在測試上面代碼,那么輸入上面inet_aton()函數時,一定看到提醒中還有inet_pton()與inet_ntop()函數。

這2個函數既能處理IPv4也能處理IPv6,而inet_aton()和inet_ntoa()只能處理IPv4。它們的使用方式如下:

import socketimport binasciiipv6_str = '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b'packed = socket.inet_pton(socket.AF_INET6, ipv6_str)print('原始字符串ip地址:', ipv6_str)print('C庫能識別的ip地址', binascii.hexlify(packed))print('還原C庫ip地址字符串', socket.inet_ntop(socket.AF_INET6, packed))print()ipv4_str = '192.168.50.1'packed = socket.inet_pton(socket.AF_INET, ipv4_str)print('原始字符串ip地址:', ipv4_str)print('C庫能識別的ip地址', binascii.hexlify(packed))print('還原C庫ip地址字符串', socket.inet_ntop(socket.AF_INET, packed))print()

運行之后,效果如下:

Python實現socket庫網絡通信套接字

以上就是Python實現socket庫網絡通信套接字的詳細內容,更多關于Python socket庫的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一区二区三区av| 国产亚洲一区| 国产v日韩v欧美v| 日韩在线综合| 欧美特黄一区| 免费成人在线影院| 日本不卡视频在线| 精品三级在线观看视频| www在线观看黄色| 午夜欧美理论片| 91亚洲精品在看在线观看高清| 欧美一区网站| 日韩久久精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费人成黄页网站在线一区二区| 青青草精品视频| 老牛国内精品亚洲成av人片| 特黄特色欧美大片| 91精品一区| 日韩三区免费| 婷婷久久免费视频| 欧美日韩国产观看视频| 老司机精品久久| 精品国产91| 亚洲乱亚洲高清| 在线天堂资源www在线污| 六月婷婷一区| 日韩欧美精品一区| 青青青国产精品| 亚洲精品97| 成人av三级| 中文字幕av一区二区三区四区| 精品日本视频| 日韩一区二区三区免费视频| 久久久夜夜夜| 精品一区二区三区亚洲| 国产精品美女久久久| 成人精品国产亚洲| 欧美精品三级在线| 老牛国产精品一区的观看方式| 精品不卡一区| 欧美日韩亚洲一区三区| 好吊日精品视频| 精品三级在线| 国产欧美成人| 青草国产精品久久久久久| 日韩精品电影| 日韩av有码| 国产精品2023| 91成人在线| 日韩精品一区二区三区中文字幕| 欧美精品一线| 欧美91精品| 91超碰国产精品| 国产精品91一区二区三区| 激情久久一区二区| 四季av一区二区凹凸精品| 精品久久影院| 亚洲国产欧美日本视频| 91日韩在线| 日韩欧美一区二区三区免费观看| 国产美女撒尿一区二区| 久久精品超碰| 国产精品视频首页| 国产精品视频一区二区三区综合| 日本麻豆一区二区三区视频| 日韩中文字幕亚洲一区二区va在线| 日韩成人三级| 婷婷成人基地| 亚洲人成在线影院| 国产精品sm| 亚洲黄色免费看| 国产亚洲精品久久久久婷婷瑜伽| 麻豆9191精品国产| 日韩欧乱色一区二区三区在线| 国产精品大片| 国产精东传媒成人av电影| 激情黄产视频在线免费观看| 成人精品中文字幕| 日韩制服丝袜av| 国产情侣一区在线| 久久久9色精品国产一区二区三区| 欧美亚洲激情| 日韩av中文字幕一区二区| 久久不卡国产精品一区二区| 麻豆久久久久久久| 欧美~级网站不卡| 日韩一区二区三区免费视频| 美女久久久精品| 欧美特黄视频| 精品久久久中文字幕| 亚洲性色av| 亚洲三级毛片| 欧美精品日日操| 亚洲精品系列| 久久高清免费| 国产亚洲一区二区三区不卡| 日本黄色精品| 青草av.久久免费一区| 亚洲综合在线电影| 国产日产精品一区二区三区四区的观看方式| 麻豆精品av| 日韩高清一区在线 | 亚洲久久一区| 欧美韩日一区| 欧美激情视频一区二区三区免费 | 免费在线看一区| 国产高潮在线| 视频一区中文字幕国产| 精品国产乱码| 日韩欧美久久| 日韩天堂av| 老司机免费视频一区二区三区| 午夜日韩福利| 久久婷婷激情| 国产精品xx| 老牛国内精品亚洲成av人片| 日韩欧美美女在线观看| 好吊日精品视频| 欧美日韩一区二区三区视频播放| 国产精品一区二区精品| 综合欧美精品| 免费欧美日韩| 蘑菇福利视频一区播放| 欧美特黄a级高清免费大片a级| 久久免费国产| 麻豆精品蜜桃| 精品精品国产三级a∨在线| 日韩精品午夜视频| 亚洲精品乱码久久久久久蜜桃麻豆| 99久久精品网站| 天堂中文av在线资源库| 首页国产精品| 激情黄产视频在线免费观看| 成人国产精品久久| 日韩a一区二区| 日韩一区二区三区免费| 深夜视频一区二区| 亚洲婷婷在线| 一区免费视频| 蜜臀久久久久久久| 日韩高清国产一区在线| 日韩一区二区三区精品 | 伊人久久在线| 99tv成人| 丝袜诱惑制服诱惑色一区在线观看| 亚洲成人三区| 天堂久久一区| 国内不卡的一区二区三区中文字幕| 国产一区二区精品久| 成人久久一区| 最近国产精品视频| 国产成人精品一区二区三区在线| 日本美女一区| 免费人成精品欧美精品 | 久久精品国产99久久| 亚洲欧美日本国产专区一区| 日韩欧美激情| 偷拍精品精品一区二区三区| 国产精品视区| 久久亚洲精品中文字幕| 亚洲女同一区| 国产精品一区二区三区四区在线观看| 98精品视频| 亚洲午夜国产成人| 中文字幕成在线观看| 亚洲日产av中文字幕| 在线天堂中文资源最新版| 蜜臀av在线播放一区二区三区| 国产伦精品一区二区三区视频| 亚洲不卡系列| 久久亚洲精品中文字幕| 蜜桃视频一区二区三区| 色爱av综合网| 精品欠久久久中文字幕加勒比| 美女网站久久| 91精品国产成人观看| 欧美91在线|欧美| 天堂va蜜桃一区二区三区| 亚洲日本网址| 久久成人一区| 免费日韩av片| 亚洲精品国产嫩草在线观看| 国产欧美亚洲精品a| 精品一区亚洲| 激情综合婷婷| 国产日韩视频| 日韩中文字幕无砖| 女人天堂亚洲aⅴ在线观看| 欧美国产极品| 欧美日韩xxxx| 一区二区三区国产在线| 亚洲视频综合| 久久国产影院| 久久久夜夜夜| 91精品精品| 激情综合网五月| 国产欧美一区二区三区精品酒店| 久久精品国产在热久久| 日本精品另类|