免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

python滲透測(cè)試入門(mén)——基礎(chǔ)的網(wǎng)絡(luò)編程工具

《Python黑帽子——黑客與滲透測(cè)試編程之道學(xué)習(xí)》這本書(shū)是我在學(xué)習(xí)安全的過(guò)程中發(fā)現(xiàn)的在我看來(lái)十分優(yōu)秀的一本書(shū),業(yè)內(nèi)也擁有很高的評(píng)價(jià),所以在這里將自己的學(xué)習(xí)內(nèi)容分享出來(lái) 。
1.基礎(chǔ)的網(wǎng)絡(luò)編程工具 。
實(shí)驗(yàn)環(huán)境:vscode+kali虛擬機(jī)
(1)TCP客戶(hù)端
from ctypes.wintypes import tagRECTfrom http import clientfrom pydoc import cliimport socketfrom urllib import response target_host = "www.baidu.com"target_port = 80client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.connect((target_host,target_port))client.send(b"GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n")response =client.recv(4096)print(response.decode())client.close()首先創(chuàng)建一個(gè)帶有AF_INET和SOCK_STREAM參數(shù)的socket對(duì)象 。AF_INET參數(shù)表示我們將使用標(biāo)準(zhǔn)的IPv4地址或主機(jī)名,SOCK_STREAM表示這是一個(gè)TCP客戶(hù)端 。然后,我們將該客戶(hù)端連接到服務(wù)器,并發(fā)送一些bytes類(lèi)型的數(shù)據(jù) 。最后一步,接收返回的數(shù)據(jù)并將其打印到屏幕上,再關(guān)閉socket 。以下是運(yùn)行結(jié)果 。

python滲透測(cè)試入門(mén)——基礎(chǔ)的網(wǎng)絡(luò)編程工具

文章插圖
(2) UDP客戶(hù)端
from http import clientimport sockettarget_host = "127.0.0.1"target_port = 80client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)client.sendto(b"AAABBBCCC",(target_host,target_port))data, addr = client.recvfrom(4096)print(data.decode())client.close()UDP客戶(hù)端和TCP客戶(hù)端相差不大,并且作用也相去不遠(yuǎn),在創(chuàng)建socket對(duì)象時(shí),需要將socket類(lèi)型改成SOCK_DGRAM,之后調(diào)用sendto()函數(shù)即可 。UDP是一個(gè)無(wú)連接協(xié)議,所以不需要connect()函數(shù)建立連接 。recvfrom()函數(shù)不僅返回接收到的數(shù)據(jù),還會(huì)返回詳細(xì)的數(shù)據(jù)來(lái)源信息(主機(jī)名和端口號(hào)) 。。
(3)TCP服務(wù)端(多線程)
from http import client, serverimport socketimport threadingfrom urllib import requestIP = '0.0.0.0'PORT = 9998def main():server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((IP,PORT))server.listen(5)print(f'[*] Listening on {IP}:{PORT}')while True:client, address = server.accept()print(f'[*] Accepted connection from {address[0]}:{address[1]}')client_handler = threading.Thread(target=handle_client, args=(client,))client_handler.start()def handle_client(client_socket):with client_socket as sock:request = sock.recv(1024)print(f'[*] Received: {request.decode("utf-8")}')sock.send(b'ACK')if __name__ == '__main__':main()我們先指定服務(wù)器應(yīng)該監(jiān)聽(tīng)哪個(gè)IP地址和端口 。接著,讓服務(wù)器開(kāi)始監(jiān)聽(tīng),并把最大連接數(shù)設(shè)為5 。下一步,讓服務(wù)器進(jìn)入主循環(huán)中,并在該循環(huán)中等待外來(lái)連接 。當(dāng)一個(gè)客戶(hù)端成功建立連接的時(shí)候,將接收到的客戶(hù)端socket對(duì)象保存到client變量中,將遠(yuǎn)程連接的詳細(xì)信息保存到address變量中 。然后,創(chuàng)建一個(gè)新的線程,讓它指向handle_client函數(shù),并傳入client變量 。創(chuàng)建好后,我們啟動(dòng)這個(gè)線程來(lái)處理剛才收到的連接,與此同時(shí)服務(wù)端的主循環(huán)也已經(jīng)準(zhǔn)備好處理下一個(gè)外來(lái)連接 。而handle_client函數(shù)會(huì)調(diào)用recv()接收數(shù)據(jù),并給客戶(hù)端發(fā)送一段簡(jiǎn)單的回復(fù) 。那么我們用前面寫(xiě)好的TCP客戶(hù)端給服務(wù)端發(fā)送幾個(gè)測(cè)試包 。
首先開(kāi)啟服務(wù)端:
【python滲透測(cè)試入門(mén)——基礎(chǔ)的網(wǎng)絡(luò)編程工具】
python滲透測(cè)試入門(mén)——基礎(chǔ)的網(wǎng)絡(luò)編程工具

文章插圖
在客戶(hù)端發(fā)送測(cè)試包,即可看到:
python滲透測(cè)試入門(mén)——基礎(chǔ)的網(wǎng)絡(luò)編程工具

文章插圖
這次的分享先到這里,下一次將擴(kuò)充這次這幾個(gè)實(shí)驗(yàn)的功能 。

    經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀