ネットワークパケットを送受信できるアセンブラで起動可能なプログラムを作成したいと思います。ライブラリは使いたくないので、すべて自分で作成したいです(そして、そうしながら学びたいです)。残念ながら、最下位レベルのネットワークカードとの通信(rawソケットの送信)に関する情報を見つけることができませんでした。ネットワークカードに割り当てられているポートに関する情報(または、常に同じであるとは限らない場合はその方法)は見つかりませんでしたが、使用方法OUT
と手順が必要だと思います。IN
誰かが私を正しい方向に向けることができますか?;-)
3 に答える
これは解決すべき非常に大きな問題です。「生のソケット」にたどり着くだけでもかなりの作業になります。
まず、最新の BIOS では、通常、ネットワーク カードはデフォルトで構成されないため、PCI 構成を処理して、プロセッサから見えるポートをいくつか持つように構成する必要があります。これにより、CPU が実際にネットワーク カードと通信できるようにする基本的な機能が得られます。
次に、たまたま使用している特定のチップセットに関するドキュメントを見つけて、ネットワーク データの読み書きの方法を知る必要があります。一部の古いカードではこれは非常に簡単でしたが、新しいカードのほとんどはスキャッター/ギャザー ハードウェアを備えたバス マスターとして機能します。単純な転送を行うようにプログラムすることは、簡単ではありません。ただし、これはハードウェアに完全に依存します。
第 3 に、未加工のソケットを使用できるようにするには、IP スタックのかなりの部分を開発する必要があります。ハードウェア レベルでは、基本的に 2 つの機能があります。たまたま到着したパケットを受信し、指定された MAC アドレスまたは他のハードウェア アドレスにパケットを送信します。
その上にある次の 2 つのレイヤーは、ARP リゾルバー(MAC アドレスの代わりに IP アドレスを使用できるようにするため) と DNS クライアント (ドットで区切られた四角形のようなものの代わりに通常のアドレス名を使用できるようにするため) になります。おそらく、IP データグラムを作成/理解する方法を知っているソフトウェアを構築したいと思うでしょう。
ネットワーク カードが異なれば、ハードウェア インターフェイスも異なります (デバイス ドライバが異なるのはこのためです)。
デバイスの製造元からハードウェアに関する情報を入手する場合があります (そうでない場合もあります。メーカーはそれを専有情報と見なし、独自のデバイス ドライバーを作成する可能性があります)。
また、オープン ソース ネットワーク カードのソース コードを調べて、その情報を取得することもできます。または、おそらくCrynwr パケット ドライバー.