30.第二階段x64游戲實戰-認識網絡數據包發送流程

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動!

內容參考于:圖靈Python學院

上一個內容:29.第二階段x64游戲實戰-技能冷卻

發送數據包的方式(函數)操作系統提供

1.send

2.sendTo

3.WSASend

4.其它非操作系統提供,自己封裝的發包函數(它雖然是自己封裝的,但是底層還是用操作系統的函數,所以還是可以找)

下圖是網絡游戲和服務器交互流程(發送網絡數據包,簡稱發包)

游戲客戶端和游戲服務器

游戲服務器是在游戲公司那邊,游戲公司它會發布一個pc端exe的版本讓我們下載(游戲或者叫客戶端),也就是下載游戲,下載安裝到我們自己的電腦上面,安裝好運行、登錄,登錄就開始給服務器發送消息告訴服務器我們的角色上線了,然后服務器就會把我們角色相關的數據返回給我們(進入的地圖場景、身上的裝備、背包物品等各種各樣的數據,統統發送給我們),在游戲中我們看到的游戲界面實際都是本地(我們電腦中的內存)數據,是我們電腦本身的數據,比如說我們的電腦斷網了,游戲還是存在還是可以看得到游戲的界面,但游戲會提示網絡超時、掉線等,但游戲還是存在的一些數據也是存在的,還是一樣的有場景、有文字、有我們游戲角色、有攻擊力、裝備等畫面還是存在,斷網了只不過我們的游戲沒辦法和游戲服務器相互傳輸數據了而已,只是傳輸的這個線斷了,我們的數據發不過去,游戲服務器的數據發不過來,現在知道發包這件事之后再看游戲中吃藥這個事,點擊藥物之后血量會增加,它實際上是點擊藥物之后,給游戲服務器發送一個吃藥的事情,然后服務器把最新的血量給我們發過來,我們游戲看到的血量增加只是一個顯示效果,這里就要分清一個東西,游戲中那些操作會進行發包,那些不會進行發包,比如打開背包、關閉背包、打開人物信息窗口、關閉人物信息窗口這些功能就沒必要告訴服務器這種東西不是很重要沒有意義,所以這些東西就不會有發包,也就是斷網了也能正常使用,然后比如移動這個東西要不要告訴服務器,這肯定要告訴服務器的,再比如說背包里的貨幣,這種是最影響戰斗力的東西很重要它就會經過服務器校驗,就比如背包里顯示的貨幣有55,這個55只是本地的,只是供給我們看的,實際用錢的時候,服務器會拿服務器中的貨幣來做校驗,所以就算我們本地把貨幣改成9999也沒有用,這只是改的本地,服務器沒有改

我們玩家和游戲

在 游戲客戶端和游戲服務器 中寫了,敏感操作都會發送一個數據包,比如買東西時的貨幣、人物屬性變化這種敏感操作都會給服務器發送一個數據包,這個數據包是怎么發送的呢?發送數據包它是通過一個公共函數(公共call),最開始寫了發送數據包的4種方式,當我們觸發了一個需要發包的操作,比如移動,它就會拼接移動的數據包,比如我們當前坐標、目的地坐標,還有個數據包頭,數據包頭用于告訴服務器當前是移動還是吃藥還是釋放技能等,拼接完數據包之后,一般游戲會為了防止被抓包,會加密數據包,然后調用發送數據包函數,把數據包發送給服務器,然后服務器接到我們的數據包,執行服務器對應的代碼執行完把結果返回給游戲,然后游戲會進行解密數據包,然后通過數據包的描述執行對應的代碼,比如移動

通過上面可以看出,我們觸發的移動只是讓游戲發送一個數據包,至于移動不移動要看服務器返回的數據包

然后移動、釋放技能等會觸發發送數據包的操作會有很多,所以游戲開發者不可能給移動專門寫一個拼接數據包、加密、發送數據包的代碼,也不可能給釋放技能專門寫一個拼接數據包、加密、發送數據包的代碼,如果每個都單獨寫拼接數據包、加密、發送數據包的代碼會很費事,所以所有發送數據包的操作使用的拼接數據包、加密、發送數據包的代碼都是同一個,所以拼接數據包、加密數據包一般都是游戲開發者自己寫的,我們沒法找,但是發送數據包的操作它只能使用操作系統提供的,所以我們在操作系統提供的發送數據包函數設置斷點,就能找到加密之前的數據包,然后分析數據包結構,然后模擬數據包,然后把模擬的數據包發送給游戲服務器,這就可以實現一些東西,比如自動喊話

當前的游戲它使用的是send函數發送的數據包,把send、sendTo、WSASend全部設置斷點,誰的斷點觸發了游戲就用的誰,如果都沒觸發那就找ws2_32.WEP函數,這個函數是Windows系統的用戶層發送網絡數據包的底層,不調用 send、sendTo、WSASend那一定會調用WEP函數


img

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82325.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【每日一題】【前綴和優化】【前/后綴最值】牛客練習賽139 B/C題 大衛的密碼 (Hard Version) C++

牛客練習賽139 B題 大衛的密碼 (Easy Version) 牛客練習賽139 C題 大衛的密碼 (Hard Version) 大衛的密碼 題目背景 牛客練習賽139 題目描述 給定一個 n m n\times m nm的網格圖,我們使用 ( i , j ) (i,j) (i,j)表示網格中從上往下數第 i i i行和從左往右數第…

文件夾圖像批處理教程

前言 因為經常對圖像要做數據清洗,又很費時間去重新寫一個,我一直在想能不能寫一個通用的腳本或者制作一個可視化的界面對文件夾圖像做批量的修改圖像大小、重命名、劃分數據訓練和驗證集等等。這里我先介紹一下我因為寫過的一些腳本,然后我…

【Unity實戰筆記】第二十四 · 使用 SMB+Animator 實現基礎戰斗系統

轉載請注明出處:🔗https://blog.csdn.net/weixin_44013533/article/details/146409453 作者:CSDN|Ringleader| 1 結構 1.1 狀態機 1.2 SMB 2 代碼實現 2.1 核心控制 Player_Base_SMB 繼承 StateMachineBehaviour ,控制變量初始…

Python虛擬環境再PyCharm中自由切換使用方法

Python開發中的環境隔離是必不可少的步驟,通過使用虛擬環境可以有效地管理不同項目間的依賴,避免包沖突和環境污染。虛擬環境是Python官方提供的一種獨立運行環境,每個項目可以擁有自己單獨的環境,不同項目之間的環境互不影響。在日常開發中,結合PyCharm這樣強大的IDE進行…

大模型智能體入門掃盲——基于camel的概述

前言 本篇博客想帶讀者進行一個智能體入門掃盲,了解基礎知識,為什么用camel呢,因為小洛發現它們文檔對這種智能體的基本組件介紹得很全面深入。 基礎概念 agent 一個典型的agent智能體包含三個核心部分: 感知模塊&#xff1…

目標檢測 RT-DETR(2023)詳細解讀

文章目錄 主干網絡:Encoder:不確定性最小Query選擇Decoder網絡: 將DETR擴展到實時場景,提高了模型的檢測速度。網絡架構分為三部分組成:主干網絡、混合編碼器、帶有輔助預測頭的變換器編碼器。具體來說,先利…

DeepSeek 賦能數字農業:從智慧種植到產業升級的全鏈條革新

目錄 一、數字農業的現狀與挑戰二、DeepSeek 技術解析2.1 DeepSeek 的技術原理與優勢2.2 DeepSeek 在人工智能領域的地位與影響力 三、DeepSeek 在數字農業中的應用場景3.1 精準種植決策3.2 病蟲害監測與防治3.3 智能灌溉與施肥管理3.4 農產品質量追溯與品牌建設 四、DeepSeek …

<uniapp><vuex><狀態管理>在uniapp中,如何使用vuex實現數據共享與傳遞?

前言 本專欄是基于uniapp實現手機端各種小功能的程序,并且基于各種通訊協議如http、websocekt等,實現手機端作為客戶端(或者是手持機、PDA等),與服務端進行數據通訊的實例開發。 發文平臺 CSDN 環境配置 系統&…

高速串行差分信號仿真分析及技術發展挑戰續

7.3 3.125Gbps 差分串行信號設計實例仿真分析 7.3.1 設計用例說明 介紹完 Cadence 系統本身所具有的高速差分信號的仿真分析功能之后,我們以一個實例來說明 3.125Gbps 以下的高速差分系統的仿真分析方法。 在網上下載的設計文件“Booksi_Demo_Allegro160_Finishe…

【Golang】部分語法格式和規則

1、時間字符串和時間戳的相互轉換 func main() {t1 : int64(1546926630) // 外部傳入的時間戳(秒為單位),必須為int64類型t2 : "2019-01-08 13:50:30" // 外部傳入的時間字符串//時間轉換的模板,golang里面只能是 &quo…

第十六章:數據治理之數據架構:數據模型和數據流轉關系

本章我們說一下數據架構,說到數據架構,就很自然的想到企業架構、業務架構、軟件架構,因為個人并沒有對這些內容進行深入了解,所以這里不做比對是否有相似或者共通的地方,僅僅來說一下我理解的數據架構。 1、什么是架構…

Day126 | 靈神 | 二叉樹 | 層數最深的葉子結點的和

Day126 | 靈神 | 二叉樹 | 層數最深的葉子結點的和 1302.層數最深的葉子結點的和 1302. 層數最深葉子節點的和 - 力扣(LeetCode) 思路: 這道題用層序遍歷的思路比較好想,就把每層的都算一下,然后返回最后一層的和就…

PCIE 4.0 vs PCIE 5.0固態硬盤——區別、科普與選購場景全解析

隨著數字內容和高性能計算需求的爆發,固態硬盤(SSD)已成為PC、游戲主機和工作站不可或缺的核心硬件。面對市面上層出不窮的新一代SSD產品,大家最常見的一個疑惑:**PCIe 4.0和PCIe 5.0固態硬盤,到底有啥區別…

vue pinia 獨立維護,倉庫統一導出

它允許您跨組件/頁面共享狀態 持久化 安裝依賴pnpm i pinia-plugin-persistedstate 將插件添加到 pinia 實例上 pinia獨立維護 統一導出 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…

Dify源碼學習

文章目錄 1 大模型基本原理1.1 model_context_tokens、max_tokens和prompt_tokens1.1.1 三者之間的關系1.1.2 總結對比 2 Dify源代碼2.0 前后端代碼跑起來【0】準備開發環境【1】下載代碼【2】運行后端(1)Start the docker-compose stack(2&a…

連接表、視圖和存儲過程

1. 視圖 1.1. 視圖的概念 視圖(View):虛擬表,本身不存儲數據,而是封裝了一個 SQL 查詢的結果集。 用途: 只顯示部分數據,提高數據訪問的安全性。簡化復雜查詢,提高復用性和可維護…

微信小程序中,解決lottie動畫在真機不顯示的問題

api部分 export function getRainInfo() {return onlineRequest({url: /ball/recruit/getRainInfo,method: get}); }data存儲json數據 data:{rainJson:{} }onLoad方法獲取json數據 onLoad(options) {let that thisgetRainInfo().then((res)>{that.setData({r…

從加密到信任|密碼重塑車路云一體化安全生態

目錄 一、密碼技術的核心支撐 二、典型應用案例 三、未來發展方向 總結 車路云系統涉及海量實時數據交互,包括車輛位置、傳感器信息、用戶身份等敏感數據。其安全風險呈現三大特征: 開放環境威脅:V2X(車與萬物互聯&#xff0…

光譜相機在地質勘測中的應用

一、?礦物識別與蝕變帶分析? ?光譜特征捕捉? 通過可見光至近紅外(400-1000nm)的高光譜分辨率(可達3.5nm),精確識別礦物的“光譜指紋”。例如: ?銅礦?:在400-500nm波段反射率顯著低于圍…

理論篇三:如何編寫自定義的Webpack Loader或Plugin插件

在 Webpack 中,自定義 Loader 和 Plugin 是擴展構建能力的關鍵方式。以下是它們的實現方法和核心邏輯,通過代碼示例和步驟拆解幫助你快速掌握。 一、自定義 Loader 1. Loader 的本質 作用:將非 JS 文件轉換為 Webpack 能處理的模塊。特點:純函數,接收源文件內容,返回處理…