mones2

NetServerでRead

[Mona PJ Wiki:mones2/22.ネットワークサーバ/03.uIPのサーバーを作ろう簡単なRead] NetServerの深遠部でのReadインターフェースの実装がすんだ。(Windows上) server->SetListen(9000); // ポート9000をListen Buffer* buffer = server->Read(9000); // ポー…

MonaがWebサーバになった日 2005/12/31

uIPが正常動作し、MonaがWebサーバになりました。 涙が出そうなくらいうれしいですね。 1.MonaでuIPを起動します。 2.ブラウザからアクセスします 3.Monaからコンテンツが返ってきます 4.Live HTTP headersで見てみると HTTP/1.x 200 OK Server: Mona OS 0.3…

MonaでuIPが動作しない原因を探る会

Monaに無理やり移植したuIPを実行しても、動いていないように見える。 症状は Windows側からのpingに反応しない Windows側からのwgetに反応しない こういうときのデバッグの際に、どうやって犯人を追い詰めるかの過程を書いてみると、だめな点が分かったり他…

uIP on WinPcapのhttpdがうまく動かない

uip.cのuip_tcpchksumの呼び出しをコメントアウトすると動く。 checksumがincorrect。 chksumは uip_arch.cにあって、正式にはuipの一部ではなくてサンプル扱い。 これを利用したのがまずかったか? うーん?分からん・・・ Etherealで確かめたところ、やはり…

uIPをWinPcap用に移植(uIP on WinPcap)

id:higepon:20051020:1129823076で紹介したuIP。 uIPはとてもコンパクトなネットワークプロトコルスタック実装です。 uIPは環境にあまり依存せず、移植を意識した作りになっています。 更にサポートされていない環境への移植ドキュメント(これ)まで用意され…

Monaのプロトコルスタックの方向性について考える

mones2の実装をいろいろ進めていましたが2つの狙いがありました。 実装を通してのドライバインターフェースの設計の種とする ネットワークの知識の習得 「実装を通してのドライバインターフェースの設計の種とする」 狙い NICドライバの最小インターフェース…

uipとFreeBSDのプロトコルスタック

uipとFreeBSDのプロトコルスタックどちらもある程度、移植実績があるようですが、どれくらい規模や移植の手間が違うだろうか。 自分でいろいろ調べているのですが、この辺りに詳しい方のご意見とかうかがえるととても助かります。 どれくらいOSの機能に依存…

TCPためしに送信の準備中

SYNフラグを立ててTCP送信してみようと試みる。 手順としては あて先IPアドレスを適当に決める ARPでIPアドレス⇒MACアドレス変換 Etherフレームを整える IPヘッダを用意 TCPヘッダを用意 相手が分かっているので1, 2 あたりは省略。 でやってみたらうまく行…

TCPのヘッダを表示してみる

とりあえずTCPのヘッダを表示するプログラムを作ってみました。 出力はこんな感じ。 srcport=5632 dstport=25606 seqnum=448123589 acknum=1488452443 reserved=0 headlen=5 urg=0 ack=1 psh=1 rst=0 syn=0 fin=0 wndsize=20509

TCP勉強した

TCP(Transmission Control Protocol)の勉強を始めました。 ↓の本を軽く読んで見ましたが、一回では頭に入りませんでしたw。マスタリングTCP/IP 応用編作者: Philip Miller,苅田幸雄出版社/メーカー: オーム社発売日: 1998/05/01メディア: 単行本購入: 7人 …

ping応答とUDP受信@WinPcap

あっさりとできました。 コードは以前のMona版とほぼ同じなので割愛。 WinPcap最高!

WinPcapでEther Frame送信 ARP応答

昨日の受信に引き続いて、パケットの送信をしてみました。 結果から言うと簡単でした。 pcap_sendpacket(handle, (byte*)(&reply), 100); のように、引数にアダプタのハンドル、パケット、パケットサイズを渡してやれば送信終了です。 これを使用して存在し…

Nicドライバを抽象化

Monaのネットワーク実装に、なぜWinPcapが関係あるのか?と思われた方もいるかもしれません。 がんばってWinPcapの使い方を学んだのには理由があります。 それは、Mona用のプロトコルスタックの開発のほとんどをWindows上で行ってしまおうという意図があるか…

WinPcapでEther Frame受信・Dump

id:higepon:20051206:1133877107の続きです。WinPcapでは2つの方法でパケットを受信できます。 1つ目の方法はパケット受信ハンドラを登録する方法。 2つ目の方法はパケットを能動的にループで受信する方法です。 今回は今後のMonaでの実装を考えて後者の方法…

WinPcapを試す

id:Hossy:20051130で知ったWinPcapを試してみました。 WinPcap, The Packet Capture and Network Monitoring Library for Windows http://www.winpcap.org/ WinPcapとは? WindowsでEtherフレームの送受信ができるライブラリ。(だと思う) インストール Win…

Ruby UDP→ Mona UDP

一方通行メッセンジャーキタコレ! Windows側で ruby udp.rb # メッセージ送信 Monaで受信 祭りですよ祭り。ヽ(;´Д`)ノ

RubyでUDP

MonaでのUDPテストに、Windows側からパケット送信する必要が出てきました。 C++、Perl、Java、C#と選択肢はいろいろあるのですがここは、やはりRubyでしょう。 最近Geekの間では、こっそりRubyを勉強するのが流行っているようですし(;´Д`) とても簡単です…

UDPお勉強

IPが分かっていれば、特に難しいところはなさそうです。 ネットワークレイヤ的には イーサーネットタイプ 0x800 によりIP IPプロトコル 17 により UDP UDPのポート番号を元にアプリケーションを特定 アプリケーション特定のプロトコルでほげほげ という感じ…

ICMP応答まとめ & リファクタリング

ICMP応答のまとめ Echo要求のICMPHeader->data部に、id, sequence が入っている Echo応答する場合は、これとまったく同一のものを、Headerに格納して送信する これで、要求に対する応答のマッチングが行われる。 べた書きで、書いていたコードをリファクタリ…

MonaがWindowsのpingに返事するようになった

MonaがWindowsのpingに返事するようになりました。 アドバイスを下さった方どうもありがとうございました。 pingに返事をするようになった瞬間は、Monaで初めてGUIが動いたり、文字が出たりと同じくらい感動しました。 今後は、pingに答える→ICMP応答できる→…

ICMP応答がうまくいかないのはなぜ?

ICMP応答がうまくいかないのはなぜ? 今のところ二つの疑惑が id/sequence問題 id:fiberfiberさんによる指摘。 #素人ですが、rfc792をちょっと見てみました。 IdentifierとSequence numberはEcho requestのものを正しくコピーしてますか? Identifier=192.1…

ICMP応答きたけど・・・

WindowsからのICMPエコー要求(ping)に対して、MonaがICMPエコー応答を返すようになった。 でも・・・。Windows側の ping はパケットロス100%とおっしゃる。 Etherealでパケットを見ていると、きちんと応答していて特におかしな点は見られない。 うーんなんで…

ICMP応答までもう一歩

昨日ARPのバグは直ったので、Windows側でARPがキャッシュされるようになった Etherealのパケットダンプとにらめっこして二つのバグを修正した。 関係ないIPパケットにICMP応答してた(ぉ パケットサイズを0と誤って指定していた これをやったところEthereal…

ARPデバッグ中

Etherealで解析したところ3点おかしい Ether Frame check sequenceがおかしい おかしいが悪さはしていないようなのであとまわし ARPのsrc mac addressが0になっている MessageInfo.strのコピーバグだった。monapi/Message.cppを修正しました。 ARPのsrc ip a…

ICMPデバッグ中

ICMPエコー応答を返すコードを実装してみた。 ICMPヘッダをごにょごにょ作って、それをIPヘッダのdata部にセットして送る感じ。 checkSumのロジックまでは追わず、id:Yamamiさんのロジックをそのまま拝借。 Monaを起動して、Windows側から ping を打ってみて…

ルーティング解決とは?4

id:obacheさん、えびさん、id:desutaiさんからコメントを頂きました。コメントいただいたものをまとめると デフォルトゲートウェイがすべてのルーティングを知っているとは限らない(NIC2枚差しで内外とか) PCもルーティングしないだけでルーターだ(ルーテ…

ルーティング解決とは?2

ルーティング解決とは?実装編 - Higepon’s blogの続きです。 えびさんから貴重なコメントを頂きました。 えび 『はじめまして。いつもROMさせてもらってました。 あえてはじめは簡略化しているのだとは思いますが 同一サブネットじゃなかった場合のあて先は…

ルーティング解決とは?3

id:obacheさんからコメントを頂きました。 # obache 『いやいや、ネットワーク上にルータは一つとは限らないわけで。たとえば社外へのルータと社内の別部署へのルータとか。で、宛先のIPアドレスに応じて、自分の持ってるルーティングテーブルに応じて、どの…

ルーティング解決とは?実装編

ルーティング解決とは? - Higepon’s blogの続き。 まずはストレートに実装を dword getIpRoute(Config& config, dword destIp) { dword destSubnet = destIp & config.getSubnetAddress(); dword mySubnet = config.getIpAddress() & config.getSubnetAddre…

ルーティング解決とは?

何だか連載チックになってきましたが、次はICMP応答だ - Higepon’s blogの続きです。 ping に応答するにはIPパケット送信が必須で、パケット送信の手順は以下の通りだ。というところで終わっていました。 ルーティング解決 ARPによるMACアドレス取得 ICMPヘ…