Python中g(shù)etservbyport和getservbyname函數(shù)的用法大全
在Python的網(wǎng)絡(luò)編程中,getservbyport()函數(shù)和getservbyname()函數(shù)是socket模塊中的兩個(gè)函數(shù),因此在使用這兩個(gè)函數(shù)時(shí),需要導(dǎo)入socket模塊。
1 getservbyname()函數(shù)
getservbyname()函數(shù)的作用是通過指定服務(wù)的名稱獲取該服務(wù)對(duì)應(yīng)的端口號(hào)。
相關(guān)鏈接1 服務(wù)與端口號(hào),一臺(tái)擁有IP地址的主機(jī)可以提供許多服務(wù),這些服務(wù)就是通過端口號(hào)來進(jìn)行區(qū)分的,即一個(gè)端口號(hào)對(duì)應(yīng)一個(gè)服務(wù)。
1.1 語(yǔ)法
getservbyname()函數(shù)的語(yǔ)法如下所示:
<code class="language-plaintext hljs">socket.getservbyname(servicename[, protocolname])</code>
其中,參數(shù)servicename即為要查找的服務(wù)名;參數(shù)protocolname是一個(gè)可選的參數(shù),表示該服務(wù)所基于的協(xié)議名,該參數(shù)可以設(shè)置為‘tcp’或者‘udp’,如果不設(shè)置該參數(shù),則基于任何協(xié)議的服務(wù)均可查詢。
1.2 相關(guān)代碼
1.2.1 獲取指定服務(wù)對(duì)應(yīng)的端口
使用圖1所示代碼可以獲取指定服務(wù)對(duì)應(yīng)的端口。
圖1 獲取指定服務(wù)對(duì)應(yīng)的端口
以上代碼的作用是獲取ftp服務(wù)對(duì)應(yīng)的端口,即端口號(hào)21。
1.2.2 獲取指定協(xié)議的指定服務(wù)對(duì)應(yīng)的端口號(hào)
使用圖2所示代碼可以獲取指定協(xié)議的指定服務(wù)對(duì)應(yīng)的端口。
圖2 獲取指定協(xié)議的指定服務(wù)對(duì)應(yīng)的端口
以上代碼的作用是獲取基于tcp協(xié)議的ftp服務(wù)對(duì)應(yīng)的端口,實(shí)際上和圖1中代碼的作用相同。如果將協(xié)議設(shè)置為upd,如圖3所示,此時(shí)代碼會(huì)報(bào)錯(cuò)。
圖3 獲取基于udp的ftp服務(wù)對(duì)應(yīng)的端口
以上代碼的作用是獲取基于udp協(xié)議的ftp服務(wù)對(duì)應(yīng)的端口,從報(bào)錯(cuò)信息可以看出,沒有找到基于udp協(xié)議的ftp服務(wù),實(shí)際上我們使用的ftp服務(wù)都是基于tcp協(xié)議的。
2 getservbyport()函數(shù)
getservbyport()函數(shù)的作用是通過指定端口號(hào)獲取該端口號(hào)對(duì)應(yīng)的服務(wù)名。
2.1 語(yǔ)法
getservbyport()函數(shù)的語(yǔ)法如下所示:
<code class="language-plaintext hljs">socket.getservbyport(port[, protocolname])</code>
其中,參數(shù)port是指定的端口號(hào);參數(shù)rotocolname是一個(gè)可選的參數(shù),表示該服務(wù)所基于的協(xié)議名,該參數(shù)可以設(shè)置為‘tcp’或者‘udp’,如果不設(shè)置該參數(shù),則基于任何協(xié)議的服務(wù)均可查詢。
2.2 相關(guān)代碼
2.2.1 獲取指定端口對(duì)應(yīng)的服務(wù)名
使用圖4所示代碼可以獲取指定端口對(duì)應(yīng)的服務(wù)名。
圖4 獲取指定端口對(duì)應(yīng)的服務(wù)名
以上代碼的作用是獲取端口21對(duì)應(yīng)的服務(wù)名,即ftp服務(wù)。
2.2.2 獲取指定協(xié)議的指定端口號(hào)對(duì)應(yīng)的服務(wù)名
使用如圖5所示的代碼可以獲取指定協(xié)議的指定端口號(hào)對(duì)應(yīng)的服務(wù)名。
圖5 獲取指定協(xié)議的指定端口號(hào)對(duì)應(yīng)的服務(wù)名
以上代碼的作用是獲取基于tcp協(xié)議的21端口號(hào)對(duì)應(yīng)的服務(wù)名,實(shí)際上和圖1中代碼的作用相同。如果將協(xié)議設(shè)置為upd,如圖6所示,此時(shí)會(huì)得到另外的一個(gè)服務(wù)名fsp。也就是說ftp服務(wù)和fsp服務(wù)都是使用21端口,但是ftp服務(wù)是基于tcp協(xié)議的,fsp服務(wù)是基于udp的。
圖6 獲取指定協(xié)議的指定端口號(hào)對(duì)應(yīng)的服務(wù)名
相關(guān)鏈接2, fsp是file server protocol即文件服務(wù)協(xié)議的簡(jiǎn)寫,是一個(gè)基于UDP輕量級(jí)的文件傳輸協(xié)議。
2.2.3 獲取指定范圍內(nèi)端口號(hào)對(duì)應(yīng)的服務(wù)名
可以通過for循環(huán)獲取指定范圍內(nèi)端口號(hào)對(duì)應(yīng)的服務(wù)名,如圖7所示。
圖7 獲取指定范圍內(nèi)端口號(hào)對(duì)應(yīng)的服務(wù)名
以上代碼的作用是獲取1-99的端口號(hào)對(duì)應(yīng)的服務(wù)名,因?yàn)橛行┒丝跊]有對(duì)應(yīng)的服務(wù)名,此時(shí)getservbyport()函數(shù)會(huì)報(bào)錯(cuò),因此使用異常處理的方式,當(dāng)該端口沒有對(duì)應(yīng)服務(wù)名時(shí),輸出相應(yīng)信息,如圖8所示。
圖8 1-99端口對(duì)應(yīng)的服務(wù)名
到此這篇關(guān)于Python中g(shù)etservbyport和getservbyname函數(shù)的用法的文章就介紹到這了,更多相關(guān)getservbyport和getservbyname函數(shù)的用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)輕松防止屏幕截圖的技巧分享
屏幕截圖是一種常見的用于記錄信息或者監(jiān)控用戶活動(dòng)的方法,為了保護(hù)隱私和數(shù)據(jù)安全,可以通過使用Python編寫一些防護(hù)措施來防止他人截取我們的屏幕,下面我們就來學(xué)習(xí)一下有哪些具體操作吧2023-12-12python實(shí)現(xiàn)從wind導(dǎo)入數(shù)據(jù)
今天小編就為大家分享一篇python實(shí)現(xiàn)從wind導(dǎo)入數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Windows系統(tǒng)下cython_bbox庫(kù)的正確安裝步驟
Cython-bbox一般無法直接通過pip直接安裝,那么如何安裝呢?下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下cython_bbox庫(kù)的正確安裝步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Python BentoML構(gòu)建部署和管理機(jī)器學(xué)習(xí)模型技巧掌握
BentoML是一個(gè)開源的Python框架,旨在簡(jiǎn)化機(jī)器學(xué)習(xí)模型的打包、部署和管理,本文將深入介紹BentoML的功能和用法,提供詳細(xì)的示例代碼和解釋,幫助你更好地理解和應(yīng)用這個(gè)強(qiáng)大的工具2024-01-01Python遞歸求出列表(包括列表中的子列表)的最大值實(shí)例
今天小編就為大家分享一篇Python遞歸求出列表(包括列表中的子列表)的最大值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02python實(shí)現(xiàn)網(wǎng)頁(yè)鏈接提取的方法分享
這篇文章主要介紹了python實(shí)現(xiàn)的網(wǎng)頁(yè)鏈接提取的方法,需要的朋友可以參考下2014-02-02