2017-11-21 24 views
1

私は新しいです、私はWindowsでネット情報をキャッチする必要があります。私はGetExtendedTcpTable()にバイト配列へのポインタをparamsとして呼び出しようとしましたが、呼び出しの後は何も得られません。 GetExtendedTcpTable()の空の応答

var (
    iphelp = syscall.NewLazyDLL("iphlpapi.dll") 
    tcptable = iphelp.NewProc("GetExtendedTcpTable") 
) 

var (
    buffer [20000]byte 
    table [20000]byte 
    length int 
) 

res1, res2, err := tcptable.Call(
    uintptr(unsafe.Pointer(&buffer)), 
    uintptr(unsafe.Pointer(&length)), 
    1, 
    syscall.AF_INET, 
    uintptr(unsafe.Pointer(&table)), 
    0, 
) 

私は「バッファ」と「テーブル」内の一部のデータを期待しますが、唯一の0 私が間違っているのは何がありますか?

+0

おかげ –

答えて

1

コードには2つのエラーがあります。まず、legnth = 0を渡すと、GetExtendedTcpTable()はERROR_INSUFFICIENT_BUFFER 122(0x7A)を返します。次に、5番目のパラメータはテーブル自体へのポインタではなく、返すテーブルのクラス(型)を示す入力パラメータ(パラメータ1への書き込み)です。これらのハードルを乗り越える修正バージョンがあります。

import (
     "fmt" 
     "syscall" 
     "unsafe" 
) 

const (
     TCP_TABLE_BASIC_LISTENER = iota 
     TCP_TABLE_BASIC_CONNECTIONS 
     TCP_TABLE_BASIC_ALL 
     TCP_TABLE_OWNER_PID_LISTENER 
     TCP_TABLE_OWNER_PID_CONNECTIONS 
     TCP_TABLE_OWNER_PID_ALL 
     TCP_TABLE_OWNER_MODULE_LISTENER 
     TCP_TABLE_OWNER_MODULE_CONNECTIONS 
     TCP_TABLE_OWNER_MODULE_ALL 
) 

func main() { 
     var table [2000]byte 
     var length int = len(table) 

     iphelp := syscall.NewLazyDLL("iphlpapi.dll") 
     tcptable := iphelp.NewProc("GetExtendedTcpTable") 

     length = len(table) 

     res1, res2, err := tcptable.Call(
       uintptr(unsafe.Pointer(&table)), 
       uintptr(unsafe.Pointer(&length)), 
       1, 
       syscall.AF_INET, 
       TCP_TABLE_BASIC_LISTENER, 
       0, 
     ) 

     fmt.Println(res1, res2, length, err) 
     fmt.Println(table) 
} 

I)はGetExtendedTcpTable(のリターンコードを検査することによって、これを考え出したマイクロソフトのシステム・エラー・コードが上で記載されています:。!、トムを向上させるためのhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

+0

あなたがやったおかげでたくさん、アントン、それは働きます! GetExtendedTcpTable()のエラーコードを取得しましたが、MSDNサイトで見つけられませんでした。申し訳ありませんが、私もWindowsで新しくなっています:-) –

+0

ありがとうございます。私は、エラーコードが文書化されているページへのリンクを追加しました。 – Anton

関連する問題