忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

スイッチングHubを強制的にリピータHubにする方法~MACFlooding

r4 販売 激安06_003.jpg
スイッチングHubの特性を利用してネットワークをキャプチャ
リピータHubというのは、いわゆるバカHubのこと。入力されたイーサネット情報を宛先アドレス関係無しに送る。現在はジャンクなどで200円ぐらいで販売されてるのもを除き、国内では販売されていない。スイッチングHubというのは、入力された情報をバッファリングして指定の宛先アドレスのみに送信する。現在、ハブといえば、スイッチングHubのことをさす。
 スイッチングHubの通信はある程度の安全が保障されていて、データをキャプチャすることはできないが不可能というわけでもない。スイッチングハブは、MACアドレスを取得するための機能をもっており、これを逆利用した方法でおこなう。
 MACFloodingとは、スイッチングHubのMACアドレステーブルをオーバーフローさせてキャプチャする方法。スイッチングHubは、自分の持ってる分岐ポートに繋がったネットワーク機器のマックアドレスをメモりに格納して、その対応したテーブルエントリにて切り替えながら通信を行う。
 MACFloodingは、実際には存在しない MACアドレスの入ったarp要求パケットを連打してスイッチングハブの機能を不能にさせる。つまり、差出人のMACアドレスを順次変えたパケットを送信することにより、スイッチングHubはMACアドレステーブルにポートのエントリをどんどん追加していく。これを、続けていくと当然メモリはオーバーフローを起こし、本来のスイッチングHubの機能であるMACアドレスのテーブリングが不能になる。つまり、馬鹿Hub化してしまうという現象を利用する。

インクルードファイル

#include <winsock2.h>


ソケットのオープン

SOCKET sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);

arp要求パケットは通常のパケットとは異なるレイヤー2のプロトコルのため、初期化の方法も異なる。

プロトコルヘッダー

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 );

ダミーの部分は実際には存在しないアドレスを指定する。


アライドテレシス CentreCOM GS905LF スイッチ レイヤー2スマートスイッチ/レイヤー2スイッチ(GbE) 0368R
ture bluer4i-gold pro
PR

Comment

お名前
タイトル
E-MAIL
URL
コメント
パスワード

Trackback

この記事にトラックバックする

Copyright © 3DSマジコン交流センター : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]

管理人限定

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

フリーエリア

最新CM

プロフィール

HN:
No Name Ninja
性別:
非公開

バーコード

ブログ内検索

P R