xp平台下是使用tdi,win 7平台採用的是wfp的模式
wfp框架下思路
鍊錶中節點結構體如下:
wfp中是需要註冊callout函式的,程序id是在fwpm_layer_ale_flow_established_v4層來獲取,而udp和tcp流資料資訊(比如大小,內容)是在fwpm_layer_datagram_data_v4和fwpm_layer_stream_v4層來獲取的
,問題來了,在流註冊的callout函式中我們可以獲取到資料的大小,但是問題來了,怎麼樣把程序id和對應的程序資料相對應??? //
不斷的查詢資料,研究wdk文件,wdk示例,各種搜尋和qq群請教,(*^__^*) 嘻嘻…… //
目錄如下:c:\winddk\7600.16385.1\src\network\trans\msnmntr
主要是用到了乙個fwpsflowassociatecontext0函式,具體的用法看msdn或者示例**使用,很簡單
一定要很仔細的看哦,這個函式有個很需要注意的地方,不然就藍藍更健康了哦,(關於deletefn函式的註冊和寫法)
這個fwpsflowassociatecontext0
函式的作用就是把程序id從fwpm_layer_ale_flow_established_v4層傳遞到了fwpm_layer_datagram_data_v4和fwpm_layer_stream_v4層,然後我們就可以使用鍊錶結構把程序id和程序的資料關聯起來了.
解析layerdata中的streamdata,streamdata中有個標誌位,
上傳資料判斷:
和系統定義的巨集fwps_stream_flag_send和fwps_stream_flag_send_expedited與(&)操作一下,不就可以得到是否是上傳了嗎?
和上傳資料的方法類似.
最後說一句,在操作鍊錶的時候,記得加鎖.
xp下比win7下要簡單的多,而且tdi的資料也多.實現起來還是容易的多
void analyzenetworkirp(pirp irp)
if (iostacklocation->minorfunction == tdi_receive) // tdi_receive
else if (iostacklocation->minorfunction == tdi_send) //tdi_send
else if (iostacklocation->minorfunction == tdi_receive_datagram) //tdi_receive_datagram
else if (iostacklocation->minorfunction == tdi_send_datagram) //tdi_send_datagram
else if (iostacklocation->minorfunction == tdi_connect) //本機向外界發起連線請求
else if (iostacklocation->minorfunction == tdi_accept)//外界向本機發起連線請求
// 更新程序的網路使用情況
updateprocessnetworkusage(process, &networkusageinformation);
return;
}void updateprocessnetworkusage(
__in peprocess process,
__in pnetwork_usage_information networkusageinformation
)void updateprocessnetworkusageunsafe(
__in peprocess process,
__in pnetwork_usage_information networkusageinformation
)(void)rtlinsertelementgenerictable(&networkusagegenerictable.table,
(pvoid)&tablenode, sizeof(network_usage_generic_table_node), null);
return;
}//網路使用情況結構體定義
typedef struct _network_usage_information network_usage_information, *pnetwork_usage_information;
typedef struct _network_usage_generic_table_node network_usage_generic_table_node, *pnetwork_usage_generic_table_node;
typedef struct _network_usage_generic_table network_usage_generic_table, *pnetwork_usage_generic_table;
network_usage_generic_table networkusagegenerictable;
思路如此,tdi的實現大家實現起來不難,我就不多說了,顯得很嘮叨煩人,嘿嘿
PHP 獲取網路介面檔案流
php開發呼叫各種介面在所難免,有時須要傳遞非常多引數。在傳遞引數過程中 有時會被 解析成 導致請求失敗 經過查詢資料和比較,發現php提供了多種方法 curl fopen file get contents等,就操作性 可靠性和高效來說 curl還是不錯的。參考案比例如以下 獲取網路介面裡面的檔案...
網路資料流分析 四層網路結構
本文內容不全,分析其中包含部分結構內容資訊 資料鏈路層結構 ethernet ii 總位元組數為14byte 目的mac 6 byte 源mac 6 byte type 2 byte 對於ipv6 的type ox86dd ip 層 資料段的總大小為40bytes 其中,version 佔1 byt...
hdu 1733 分層網路流
題目大意 有乙個類似於迷宮搜尋的圖,代表的是無人的路,x 代表有人的點,代表此點不可通過,代表門口。每個位置每一秒鐘只能站乙個人,每個位置到上下左右點的時間為1,問你所有人能不能出去,能出去輸出所有人都出去的最小時間,否則輸出 1.a 增加源點src,和匯點dest,然後根據每個時間點建出分層圖,每...