pcapファイルのn番目を表示する
cron
なんかで毎時pcap
なんかが固められていて、
それを利用するプログラムでエラーが起きた時に、
例えば1000番目のパケットでエラーというのが分かったなら
tcpdump -nn -r hoge.pcap -c 1000
で表示できる。
DBで大規模アクセスに対応するメモ
RDB
で大規模サービスをやるときにどう捌くか。
join
を減らす(DBに考えさせない)- あえて正規化を崩す
- キャッシュサーバ使って、
I/O
減らす(memchached
とか) - レプリケーションしてマスタ/スレーブに分ける。データ読み取りはスレーブ、更新はマスタのDBマシンへ。
linuxでGroovyをセットアップする
ちょうどCI
とか、業務でやんないお話を調べているうちに興味が出てきたので。
SDKMAN
インストール->Groovy
インストール、の流れ。10分くらいでできちゃいます。
NAT越えについてメモ
switch
の通信対戦なんかでNAT越えの問題がよくあるみたいですが、ここら辺なんでダメなのかよくわかっていなかったのでメモ。
local
<->grobal
のIP
を変換するのがNAT
local
側に複数端末を割り当てるときは一つのgrobal ip
では外側からの通信をどの端末に届けていいかわからないので、ポート番号も組み合わせる。これがNAPT
- 割り当てはルータの
NAT
テーブルに定義。これのフィルタリングがフルコーン(すべてok)・過去にlocalから通信した外部の端末のIP
ならok・過去にlocalから通信した外部の端末のIP
とポートならok・シンメトリック型(LAN
,WAN
のポートとIP
で一組)の4つの形式がある - 普通のクライアントサーバ型のオンラインゲームなんかだと
NAT
越えは比較的簡単 - というのも
local
側から外に向かって通信しているので、その段階でNAT
テーブルが定義されているから - なんで
switch
とかでNAT
を超えられないのかというと、P2P
通信だから、お互いに外側からどこに向けて通信すればいいのかわからない。 - これを解決するために
STUN
サーバのような外側から自分がどう見えているかを通知するやり方がある。
Vimで一度に4画面開く
こんな感じで一気に4画面開きたいとき、こうする。
vim D.py -c 'sp C.py' -c 'vs A.py' -c 'wincmd j' -c 'vs B.py'
参考
viewport - vim: open 4 files split horizontally AND vertically - Stack Overflow
パケットキャプチャしている端末を見つけ出す
ARP
プロトコルのことを調べているときに、Wireshark
なんかでパケットを盗聴している端末を見つけ出す方法があることを知ったので、実際に試してみました。
普段の動作
パソコンがインターネットを通じて通信するとき、
送信するときは
「アプリが送るデータをソケットAPIでネットワークスタックに依頼」
->「OSが適時パケットの分割とヘッダの負荷」
->「NICから物理的な信号として送出」
受信するときは
「NICがブロードキャストor自分宛の通信か判断」
->「OSが受け取ったパケットを組み立て」
->「組み立て終わったデータがアプリへ」
という流れ。
(のはず…)
なので、普通の動きでは自分宛以外のパケットを認識することはできない。
でもこのNIC
に対して、自分宛以外でもパケットを拾うように設定することもできる。
これをプロミスキャスモードといいます。
プロミスキャスモード
Wireshark
などのパケットキャプチャソフトはこうした設定でネットワーク上のパケットの様子を調べることができます。
でも全部を取り込んでいる、という点を突いて、キャプチャしている端末を見つけることができます。
パケットキャプチャしている端末を見つける
NIC
では宛先macアドレスを見てブロードキャストor自分宛?を判断していて、
似たような判断はOS
でもやっているのですが、そのチェックの粒度には差があって、
NIC
では厳密にmacアドレスの最初から最後を見ますが、OS
では最初の何バイトかを見て判断しています。
なので、このチェック粒度の差とプロミスキャスモードを組み合わせて、ARP
パケットを送りつけてあげることで、キャプチャ端末を特定することができます。
どういうことかというと、ぱっと見ブロードキャストなパケットで、しかもARP
要求を送ってあげると
そのパケットは無事APP
の層まで到達して、ARP
応答が戻ってくる、という仕組みです。
環境
パケットキャプチャ側をRaspberry Pi
で、
偽ARP
パケットをVirtual Box
のCent OS
から送信します。
パケットの送信にはScapy
というPython
のライブラリを使用いたしました。
まずキャプチャ側のNIC
をプロミスキャスモードにして、
偽ARP
要求パケットを送出。
その様子をWireshark
で観察
ARP
レスポンスが返ってくる。やったぜ。
参考
社内の盗聴者を見つけ出す---フリーツール「PromiScan」の使い方(中) | 日経 xTECH(クロステック)
ARPを利用してプロミスキャスモードの盗聴ホストを特定してみた - sonickun.log
盗聴者特定ツール
sniffer - How can I detect if someone is sniffing network packets on the LAN? - Information Security Stack Exchange
Windows Terminalをビルドしてインストールする
絵文字に対応したssh
クライアントソフトを探していたら、
Windows Terminal
なるソフトを見つけました。
冬には配信されるとのことだったけど、github
の方見たらビルドしてインストールはできるみたいなので、やってみました。
自分の環境ではこうだったよ、的な記事なので実際やるときは公式の方見ながら、自己責任でお願いします。
用意するもの
自分はVisual Studio 2017
でやったので、github
を参考に以下を用意しました。
Guide for build and installation · Issue #489 · microsoft/terminal · GitHub
- Visual Studio 2017
- Windows 10 SDK (10.0.18362)
- Git for Windows
- Nuget.exe
- Windows 10 Version 1903
Git for Windows
はgit
コマンドが使えるツールならなんでもいいです。
Windows 10 SDK (10.0.18362)
は以下から
Windows 10 SDK – Windows アプリ開発
Nuget.exe
は以下から「nuget.exe」を
NuGet クライアント ツールのインストール | Microsoft Docs
Windows 10 Version 1903
は以下から「Windows 10 May 2019 Update」を
Windows 10 のダウンロード
Visual Studio側の準備
必要なものをVisual Studio Installer
から入れていきます。
「C++によるデスクトップ開発」
「ユニバーサルWindowsプラットフォーム開発」
にチェック。
さらに、「インストールの詳細」->「ユニバーサルWindowsプラットフォーム開発」から 「C++ユニバーサルWindowsプラットフォーム開発」が未チェックならチェックする。
他に足りないものがあれば、あとでプロジェクトを開いた際に
こんな感じに足りないよ!って言われるので、適宜入れてあげてください。
プロジェクトの準備
以下のプロジェクトをclone
します。
GitHub - microsoft/terminal: The new Windows Terminal, and the original Windows console host -- all in the same place!
適当にディレクトリを作成して、そこで
git clone https://github.com/microsoft/terminal.git
します。
cd terminal
して移動。
git submodule update --init --recursive
をします。
さらにNuget.exe
を使って、nuget.exe restore OpenConsole.sln
を打ってください。
プロジェクトを開いて、64bit
マシンならx64
に合わせて、Release
でビルド。
おそらくたくさんエラーが出るので、それを修正していきます。
ちなみに以下に載せる修正の方法とかは、「準備するもの」に載せたIssues
のBuild Steps
に丸々載っているので、英語とか得意ならそっちを直接見た方が早いです。
VtPipeTerm
のmain.cpp
の修正。
TEST_LANG
のCYRILLIC
,CHINESE
,JAPANESE
,KOREAN
の前にu8
プレフィックスを追記。
C2220
エラーが出ているファイルは、適当なエディタで開いて、
UTF-8
のBOM
付きで保存してください。
Windows 10側の準備
以下をやっていきます。
- Windows 10 1903へのアップデート
- 開発者向け機能の設定
Windows 10 1903
へのアップデートは画面に従って進めていけばオッケーです。
外付けのUSB
とかくっつけてるとやり直しになっちゃうので、外しておきます。
それが終わったら「設定」->「更新とセキュリティ」->「開発者向け」から「開発者モード」を選択。
Windows Terminalのインストール
プロジェクトをVisual Studio
で「ソリューションのビルド」。
ビルドが無事終わったら、Terminal
->CascadiaPackage
を右クリックして「配置」を選択。
もしDEP3321
が出ているなら、
プロジェクトを一個一個右クリックして「プロパティ」から「ターゲットバージョン」「最小バージョン」を最新化してあげます。
これでインストール完了です。
絵文字もばっちりです。やったぜ!