くそみたいな記事しか生み出せない罪悪感のおかげで実装ベースの思考回路に変わり始めています。しかしながら毎度のごとくやる気が尽きたところまでしか書けませんので、随時追記していきます。
githubから拾ってきたコード
適当なプログラムやアプリ開発を一からやってみようとしたのですが、過去に何度も挫折してるので作戦変更。自分の専門分野が絡んでて、かつ他人が書いたプログラムを教材にした方が深みが出るかな...という結論に達したので、一ヶ月前に読むのを諦めたソケットプログラムのソースを引っ張ってきました。
GitHub - rbaron/raw_tcp_socket: An exercise about working with raw sockets under GNU/Linux
実行して満足して終わっちゃったんですよ。くそでしょ。
実行結果
[root@ikeda raw_tcp_socket]# ./raw_tcp_socket IP header checksum: 40710 TCP Checksum: 14092 Success! Sent 50 bytes. SEQ guess: 1138083241
とりあえず分かってること
パケットを50バイト送信してるプログラムですね。ばっと読んだ感じ、Cなのでメモリをいじったりしてた気がします。プログラム内にバイト指定する為の何かがある。
分からなかったところ
- チェックサムってなんだっけ
今後1記事書きます。これを読んでるところ。IP チェックサムの秘密
- winsock.h
windowsのソケットプログラミング用ライブラリ。
- pragma
プラグマを使用すると、コンパイル内容を詳細に渡って制御できるらしい。
- dstatで見ると92バイト送ってるんだけど
プログラムを実行するだけで出現してしまうオーバーヘッドなのかもしれない(予想)。
書き換えてみる
100バイト送るにはどうしたらいいのか?
インターフェースを指定するには?
おもうこと
実装ベースにした途端「知ってることをしゃべれる喜び」が「作れる喜び」にグレードアップするんですね。そうなると今までパケットの作りとか気にしてなかったのにちゃんと調べるようになるし、解析ツールの必要性を感じるし、プログラムやリソースの出力結果が不本意なものになってもそれが楽しい。ずっとこれが今まで苦しかったんですけど、色々考えて少しでも多く前進できる頭にしていきたいと思います。