| Welcome to SapporoWorks! We create stimulating network programs.
By a demand from user, SapporoWorks evolves. | ||||||||||||
| |||||||||||||
| 開発情報 > TCP状態の一覧取得 | |||||||||||||
|
●●●●概要 GetTcpTable()を使用すると、現在のTCP状態の一覧が取得できます。 これ、いわゆる、netstat -atn そのまんまです。 定期的にESTABLISHEDの監視をするだけでも、トロイの起動を検出するなどが可能かも・・・・ Iphlpapi.lib のリンクが必要です。 ●●●●ソース
#include <iphlpapi.h> //iphlpapi.lib をリンクする必要がある
char *StateStrings[]={"","CLOSED","LISTEN","SYN_SENT","SYN_RCVD","ESTABLISHED","FIN_WAIT1","FIN_WAIT2",
"CLOSE_WAIT","CLOSING","LAST_ACK","TIME_WAIT","DELETE_TCB"};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Buf[1024];
DWORD d=0 ;
unsigned int port;
unsigned char *p;
Memo1->Lines->Clear();
//第1パラメータにNULLをおいて、必要サイズを DWORD d に取得する
GetTcpTable(NULL,&d,FALSE);
//MIB_TCPTABLEへのポインタに、必要サイズを確保する
PMIB_TCPTABLE pTcpTable = (PMIB_TCPTABLE)new char[d] ;
if( pTcpTable ){
//TCPテーブルの取得
if( GetTcpTable( (PMIB_TCPTABLE)pTcpTable,&d,FALSE) == NO_ERROR ){
Memo1->Lines->Add("Proto Local Address\tForeign Address\tState");
//取得したテーブル数は、dwNumEntriesで分かる
for( int i = 0 ; i < (int)pTcpTable->dwNumEntries ; i++ ){
unsigned char *local_ip = (unsigned char * )&(pTcpTable->table[i].dwLocalAddr);
p = (unsigned char * )&(pTcpTable->table[i].dwLocalPort);
unsigned int local_port = *(p+0)*256 + *(p+1);
unsigned char *remote_ip = (unsigned char * )&(pTcpTable->table[i].dwRemoteAddr);
p = (unsigned char * )&(pTcpTable->table[i].dwRemotePort);
unsigned int remote_port = *(p+0)*256 + *(p+1);
// LISTEN 状態のリモート側のポート番号は無効な値が入っているようです
if(*remote_ip==0)
remote_port=0;
wsprintf(Buf,"TCP %d.%d.%d.%d:%d\t%d.%d.%d.%d:%d\t%s"
,*(local_ip+0),*(local_ip+1),*(local_ip+2),*(local_ip+3)
,local_port
,*(remote_ip+0),*(remote_ip+1),*(remote_ip+2),*(remote_ip+3)
,remote_port
,StateStrings[pTcpTable->table[i].dwState]);
Memo1->Lines->Add(Buf);
}
}
//MIB_TCPTABLEへのポインタに、確保したメモリを解放する
delete [] pTcpTable;
}
}
●●●●サンプル サンプルプログラム実行画面
ソースファイルのダウンロード 005-src.LZH 6Kbyte
実行ファイルのダウンロード 005-bin.LZH 201Kbyte
開発者のための実装系Webマガジンへの投稿
TCP/IPを利用しているプロセス情報を視覚的に表示する 各種のOSで利用可能なAPIとAPIが存在しない場合(WindowsNT/2000)のカーネルオブジェクト参照による情報取得方法を解説。 |
| 開発情報 > TCP状態の一覧取得 | |
copyright(c) 1995- SapporoWorks
当サイトはリンクフリーです。リンク時に連絡などは必要有りません。また、どのページにリンクして頂いても構いません。 | |