線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1885
推到 Plurk!
推到 Facebook!

如何判斷主機網卡mac及撥接的mac

答題得分者是:RaynorPao
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-25 14:31:17 IP:219.80.xxx.xxx 未訂閱
請教各位: 我是用撥接的方式上網的 這時如果處理封包都會有兩組mac 例如我上一個網站會有兩組封包都有記錄我上哪個網站 我想要記錄本身的就好了 所以要將撥接的mac剃除 1.可是該如何判斷這兩種mac呢? 2.另外我用gethostbyname會得到兩組ip,再透過ip也會取得2組mac,請問有方 法察出本身網卡的資訊嗎?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-25 15:27:04 IP:203.73.xxx.xxx 未訂閱
引言: 請教各位: 我是用撥接的方式上網的 這時如果處理封包都會有兩組mac 例如我上一個網站會有兩組封包都有記錄我上哪個網站 我想要記錄本身的就好了 所以要將撥接的mac剃除 1.可是該如何判斷這兩種mac呢? 2.另外我用gethostbyname會得到兩組ip,再透過ip也會取得2組mac,請問有方 法察出本身網卡的資訊嗎?
csm825050 你好: 可以利用 IP Helper API 來達成目的 你要關心的 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-25 17:39:41 IP:219.80.xxx.xxx 未訂閱
RaynorPao你好: PMIB_IFTABLE mibtbl; unsigned long tblsize; GetIfTable( mibtbl , &tblsize , TRUE ); 可是好像怪怪的 mibtbl->table->dwType讀出來的值有問題 mibtbl->table->wszName是? 請教一下這問題在哪呢 不知道你有沒有範例可以記給我呢 謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-25 20:01:49 IP:61.221.xxx.xxx 未訂閱
引言: RaynorPao你好: PMIB_IFTABLE mibtbl; unsigned long tblsize; GetIfTable( mibtbl , &tblsize , TRUE ); 可是好像怪怪的 mibtbl->table->dwType讀出來的值有問題 mibtbl->table->wszName是? 請教一下這問題在哪呢 不知道你有沒有範例可以記給我呢 謝謝
csm825050 你好: 我寫了一個簡單的範例,先參考看看吧 < class="code"> #include "Iphlpapi.h" void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString szTemp; Memo1->Clear(); DWORD dwSize=0; MIB_IFTABLE *mit=NULL; GetIfTable(NULL, &dwSize, true); mit=(MIB_IFTABLE*)new BYTE[dwSize]; if(NO_ERROR==GetIfTable(mit, &dwSize, true)) { for(int i=0; i<(int)mit->dwNumEntries; i ) { if(mit->table[i].dwType==MIB_IF_TYPE_ETHERNET) { Memo1->Lines->Add("Adapter: " (AnsiString)(char*)mit->table[i].bDescr); Memo1->Lines->Add("dwType: " IntToStr(mit->table[i].dwType)); Memo1->Lines->Add("dwPhysAddrLen: " IntToStr(mit->table[i].dwPhysAddrLen)); szTemp=""; for(int j=0; j<(int)mit->table[i].dwPhysAddrLen; j ) { szTemp =(IntToHex(mit->table[i].bPhysAddr[j], 2) " "); } Memo1->Lines->Add("bPhysAddr: " szTemp); } } } delete mit; } 備註: 還要利用 Project Manager 把以下的檔案 Add 到你的 Project 裡面 C:\Program Files\Borland\CBuilder6\Lib\Psdk\iphlpapi.lib -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-26 09:09:19 IP:61.30.xxx.xxx 未訂閱
RaynorPao你好 問題解決了 GetIfTable(NULL, &dwSize, true); mit=(MIB_IFTABLE*)new BYTE[dwSize]; if(NO_ERROR==GetIfTable(mit, &dwSize, true)) 原來是這三行的問題 想請問一下如何知道要這樣寫呢 我以為只要if(NO_ERROR==GetIfTable(mit, &dwSize, true)) 這樣就可以了耶(因為msdn沒看到範例)
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-26 09:41:00 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao你好 問題解決了 GetIfTable(NULL, &dwSize, true); mit=(MIB_IFTABLE*)new BYTE[dwSize]; if(NO_ERROR==GetIfTable(mit, &dwSize, true)) 原來是這三行的問題 想請問一下如何知道要這樣寫呢 我以為只要if(NO_ERROR==GetIfTable(mit, &dwSize, true)) 這樣就可以了耶(因為msdn沒看到範例)
csm825050 你好:
(1)這是 Win32 API 的慣例,當傳回的參數是一筆很大的資料的時候 (BLOB:
   Binary Large OBject,就是某個串流 Stream,利用一個 BYTE* 及 一個
   DWORD 來表示這個串流的長度),就必須先為這個指標配置一塊合理的記憶體
   這樣 Win32 API 才能夠把傳回的串流放到這塊記憶體裡面
(2)但是~~我們要怎麼樣才能夠知道要先為這個指標配置一塊多大的記憶體呢??
   其實很簡單,以 GetIfTable 這個 function 為例,第一次 call 這個
   function 的時候,就故意把第一個參數代入 NULL,第二個參數代入 DWORD*
   ,這個時候 Win32 API 就會知道你是來問 Size 的,就會把需要的 Size 放
   到第二個參數,然後你再依照傳回的 Size 為第一個參數配置記憶體 (以
   BYTE 為單位),最後再 call 一次 GetIfTable 就可以成功了
(3)如果你覺得這樣做很麻煩的話 (call 兩次),其實也有另外一個變通的方法
   ,那就是用預估的方式,也就是說自己先為第一個參數配置一塊記憶體 (用
   預估的方式,例如: 4096 BYTE),然後直接 call GetIfTable 一次應該也可
   以成功達到目的,不過~~這需要一點運氣 (要保證傳回的串流大小不會超過
   4096 BYTE,不然就會造成 Access Violation)
(4)以上這兩種方法都是常用的方法,也都各有優缺點,使用 (2) 的方法,可以
   很精確的配置記憶體,不會造成浪費,但是要 call 兩次,有點麻煩;使用
   (3) 的方法,只需要 call 一次,比較快,但是則需要一點運氣,可能有點
   不太保險
(5)以後你看到這方面類似的 Win32 API,應該就要會使用了
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-26 10:16:26 IP:219.80.xxx.xxx 未訂閱
嗯,謝謝 這樣就知道為何要呼叫次了
系統時間:2024-05-04 22:29:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!