Code Day's Night

ichikawayのブログ

GRO / GSO は TCP をどう変えるのか

GSO/GROを調査中、TCPのAckとの関係がよく分からなくなってきて混乱したため、ChatGPTとやりとりした内容をまとめたものです。 ChatGPTに出力させた記事ですが、内容は面白いと思ったことと、将来また自分が同じような疑問を持ちそうだと思ったため自分用の…

自作IPルーター実装時に「Message too long」はなぜ起きたのか ― Linux / AF_PACKET / GRO・GSO が生む“見えない巨大パケット”の正体 ―

PHPのsocket拡張を使ってLinuxで動作するIPルーターを自作しています。 実機で動作確認している際に、データーを転送したところで「Message too long」のエラーがたまに出ていました。 今回はその原因を探った記事です。 今回の環境は次のようになっています…

2025年ふりかえり

2025年は色々あったが、人生で初めての経験がそれなりにあってよかった。PHP系のカンファレンスは去年に引き続き全部スポンサーして参加したので満足感があった。 1月 禁酒生活が終了。2024年の11月に倒れてしまってから2ヶ月ほど禁酒していた。恐る恐る飲ん…

私とPHPカンファレンス福岡の10年

2015年にPHPカンファレンス福岡をアカセさんと始めて10年で8回開催しました。 10年ですよ、長いですね。平成から令和になり、当時5歳だった長男が中3になり、時の流れを感じます。 10周年となるPHPカンファレンス福岡2025が良い区切りだったので、アカセさん…

自作IPルーターを実装して見えた、tcpdumpに映らないカーネル内部の世界

現在PHPでIPルーターを作り始めています。簡単なものを実装してpingが通るところまで完成しました。 うおぉぉ!!! PHPで自作IPルータ(簡易版)が動いた!alice -> router(PHP) -> bob でaliceからのpingが通ったーちょっとはまってtcpdumpしてたりで解決…

PHPで第2層イーサネットの読み書きはできるのか?(できる)

PHPのsocket拡張を使うと、簡単にネットワークプログラミングができ、RAWソケットも利用可能なためTCPやIPパケットも読めます。 PHPのsocket拡張は、中ではCのsocketを呼び出しているだけなのですが、なぜかプロトコルファミリーでAF_PACKET指定できず、イー…

2024年を振り返る

今年1年を振り返ってみた。カンファレンス最高!という1年だった気がする。 コロナ禍前の2019年みたいな日々がずっと続くのが理想と思っていたので、それが戻ってきた感じ。 1月 PHPカンファレンス北海道へ。本番前日に時間があったのでtomzohさんを誘って急…

PHPカンファレンス2024にてPHPで実装するTLS/SSLプロトコルの発表をしました

2024/12/22に開催されたPHPカンファレンス2024にて、PHPでTLSを実装した時の話をしてきました。 登壇資料と動画 登壇資料はこちらです。フローの流れなどがわかりやすくなるので、ぜひプレゼンテーションモードで見てもらえると嬉しいです。 docs.google.com…

TLSやTCPをPHPで実装して人生を学ぶ「3つの層」の話をしました(ぺぱ合戦)

2024/11/30に行われた「紅白ぺぱ合戦」で技術LT(?)をしてきました。 connpass.com 紅白ぺぱ合戦は、id:asumiso と id:stefafafan の結婚披露宴(実質)のようなものです。 全体の感想 披露宴はいいですね。100人近く集まった人がいくつかグルーピングされて…

PHPで自作IPパケットを送受信したい場合

いまPHPでTCPプロトコルを実装中です。TCPはレイヤーとして4層でその下の3層にIPがあります。 PHPで自作TCPパケットを送りたい時はC言語で実装するのと同じように socket_create()関数の引数に、 AF_INETとSOCK_RAWを指定すると実現できます。 SOCK_RAWを使…

迂闊にTLS/SSLをPHPで実装してみたら最高だった件

この記事はTLS/SSLを実装してみたいという人が増えるといいな!という気持ちで書いています。実装の詳細は別記事で書こうかと思います。 数年前からいつかTLS/SSLのプロトコルをPHPで実装したいと思い、まずは本で知識を得ようかとラムダノートの「プロフェ…

ChromeがHTTPSに優先アクセスする307リダイレクトをHSTS関係なくやるようになった

2023年11月1日の時点の情報です。 先にまとめを書きます。興味があれば詳細もどうぞ。 まとめ 10月16日のChrome 118からHTTPS ファーストモードがデフォルトでオンに 条件によってHTTPS Upgradeが働いてhttpのサイトにアクセスするとhttpsに優先的にアクセス…

PHPカンファレンス福岡 スタッフ物語

PHPカンファレンス福岡2023が無事に終わった。Backlogのチケット数は258件、開催から3週間後の現在は残り7件まできている(開催後もやることがあるのがカンファレンス運営)。 私は2015年に初代実行委員長をして、それからずっとスタッフをしている。初年度…

PHPStan レベル9でintvalのmixed givenエラーが出る

PHPStan Level9(Max)を使ってチェックしているところで、最近になってintval($mixed)のように引数にmixedの型が入った値を入れるとPHPStanでエラーになった。 実際に表示されるエラーはこちら。Level8ではエラーは出ない。 Parameter #1 $value of function …

PHPカンファレンス福岡で発表した苦闘の物語の裏側

PHPカンファレンス福岡2023、非常に盛り上がりましたね!久しぶりの開催でしたが熱気があって素晴らしいカンファレンスでした。 私はカンファレンススタッフをしつつ、プラチナスポンサーとしてスポンサーセッションに登壇しました。 fortee.jp スポンサーセ…

FMVキーボード(FMV-NKBUD)がLinuxで動くか人柱になってみた

FujitsuのFMVモバイルキーボード(FMV-NKBUD)が良さそうで気になってました。 www.fmworld.net Ubuntu22.04(Linux)で動くか不明だったので買って試してみました。キーボードとトラックパッドが一体になっていて薄型でAppleのMagic Keyboardっぽい感じです。 …

Jenkinsを動かすJavaの環境を指定する

2022年9月からJenkinsはJava11以上が必須になるようなので、/usr/local/java17以下にJava17を入れてそちらでJenkinsを動かすことにした。 AmazonLinux2やUbuntu20.04, 22.04などパッケージで入れたJenkinsはたぶんsystemdで管理されているはず。今回はsystem…

Ubuntu22.04にすると古いPostgreSQLのインターフェースと接続できなくなった

問題の現象 今回の環境は非常にレアケースのため世界中でこの問題に直面したのは自分だけかもしれない。。 今回の問題の最初の挙動は、Ubuntu22.04とPHP8.1、pdo_pgsqlで古いDB(PostgreSQLと互換性のあるインターフェースを持つ)に接続すると下記のエラーが…

Laravelのアプリのテストが3倍速くなった話

Larvelに限らずCakePHPや他のフレームワーク/言語でも関係ある話かもしれません。 結論から書くと、テストデータの投入時にUserテーブルのパスワードカラムがあるとパスワードの値をハッシュ化してデータが入る箇所があり、そのハッシュの処理によってテスト…

コンピュータの歴史、仕組みがやさしく面白く読める本

コンピュータは中で何をしているのか、AND/OR回路、加算器、プログラム、その歴史が短くわかりやすくまとめられてる書籍「コンピュータ、どうやってつくったんですか?」と、もう少し内容を多めにコンピュータの歴史、インターネット、OSの話が書かれた「痛…

とにかく健康で楽しく生きていきたい!40歳を超えて

数年前に40歳を超えてました。人生の折り返し地点っぽいのでまとめておきます。 (自分がこうすればよかったという話で、読んだ方にこうした方が良いですよという記事ではありません) 自分にとっての幸せとは何か、何が嬉しいかを40歳超えてからよく考える…

Ubuntuでカーネルアップデート後に画面が映らない問題の解決 NVIDIA編

Ubuntuでアップデートしたら画面が表示されなくなった件が解決した。 他のUbuntuのバージョンやNVIDIAのGPUであってもLinuxカーネルアップデートが行われると同じ問題が起こる可能性があるのでメモを残す。 症状は、アップデート後にOS再起動するとOSは起動…

EC2インスタンスのアクセス可能なメタデータを無効にしたらsshログインできない

今回遭遇した条件 公式AMIから新規でEC2インスタンス構築 アクセス可能なメタデータを無効 これで構築したインスタンスにsshアクセスすると、登録した公開鍵がrootやec2-userに適用されずにsshログイン出来ずパーミッションエラーとなる。 回避策 新規EC2イ…

localhost指定の初期接続がすごく遅い(解決)

今回はPostgreSQLにログインするために、psql -h localhost としてた時に最初のログインまでが時間がかかり、ログイン後は問題なくクエリのレスポンスが返ってきた。psql -h 127.0.0.1では発生せず。 結論 先に結論から。PostgreSQLに限らず発生する問題でし…

軽い気持ちでUDPポートスキャンしようとしたら山が巨大だった

軽い気持ちでポートが閉じてるのを確認するポートスキャナーを作り始めました。 blog.ichikaway.com サーバリストを渡すと指定したポートを検査して閉じてるか確認します。ポートが開いてたらアラートをあげるツールです。 TCPのポートスキャンはsyn/syn-ack…

ポートが閉じてることを外部から監視するポートスキャナー(slack通知付き)

IP制限しているTCP 22(sshd)や3306(MySQL)のようなポートが空いていないかチェックするツールを作りました。 たとえば設定ミスで22番ポートがすべてのIPを許可している状態になってしまっていたというケースがありそうで、サーバ台数が数百台になってくると…

ConoHa VPSでUbuntu20に追加IPのみ設定する

ConoHa VPSでUbuntu20を選択しインストール。ConoHaの追加IPをコンパネから追加。追加IPはデフォルトでは許可ポートが全て拒否になっているので全て許可にする。 Ubuntuにsshログインし、/etc/netplan/10-gmovps.yamlを下記のように上書きし、OS再起動。する…

固定IPv4 over v6環境で自宅ネット環境を改善した

自宅は仕事用にフレッツのPPPoEのIPv4固定IPを利用していました。既存環境は空いてる時間帯は100M近く出るのですが、夕方ごろの混雑する時間帯になると15Mbpsぐらいになるためどこまで改善できるか試してみました。 結論 まずは結論から。 既存環境: IPv4固…

DNS改ざん検知ツールNScheckerのv1.0.3をリリース。引数変更、サイレントモード

NScheckerというDNS改竄検知ツール(slack通知も可能)の、バージョン v1.0.3をリリースしました。 github.com 2020年の夏にメジャーバージョンをリリースして普段使う上では問題ない状態でした。今回下記の機能を追加してマイナーバージョンアップしました。 …

PHPカンファレンスでDNS改ざん検知とDNSの面白い世界の発表をしてきました

オンラインで開催されたPHPカンファレンス2020に登壇してきました。VAddyとしてはブロンズスポンサーで協力させて頂きました。 「DNS改ざん検知ツールの実装とDNSパケットの世界」というタイトルで、前半はドメイン名ハイジャックの仕組み、事件例、対応ツー…