totofugaのブログ

ネットワークとかc言語、perlの話。

ネットワーク

小規模時のtcp_probeについて

輳制御を確認してグラフ化するのに最近tcp_probeを使用しています。 iperfとかで試す時には良いのですが、少ないパケットを送って cat /proc/net/tcpprobe 等試すと全く何も表示されません。 (full=1オプションをつけてもダメ。。) このままだと小規模で使え…

ip link経由でのドライバ追加

家にあるLinuxデバイスドライバの本のネットワークドライバのサンプルが古すぎて動かないので 4.9.57で動くようにしてついでに今風にipコマンド経由で追加できるように書き換えてみた。 最低限動くようにするところだけ移行。 #include <linux/kernel.h> #include <linux/module.h> #include <linux/netdevice.h></linux/netdevice.h></linux/module.h></linux/kernel.h>…

conntrackの勉強(1)

conntrackのフック IPTableと同じようにNetFilter経由で実装されている。 使用しているフックは PREROUTING => ipv4_conntrack_in LOCAL_OUT => ipv4_conntrack_local POSTROUTING => ipv4_confirm NF_INET_LOCAL_IN => ipv4_confirm となっている。 フック…

iptablesの勉強(4)

ユーザ定義チェインについて ユーザ定義チェイン ユーザ定義チェインは先頭と末尾に固定のipt_entryを持ったエントリとして定義される。 先頭のipt_entryはチェインの名前を示す。 チェインの名前はxt_get_revision.nameに格納される。 末尾のipt_entryはチ…

iptablesの勉強(3)

引き続きiptablesの勉強中 今回はカーネルのデータ構造とiptablesで表示されるデータについて カーネル内でのデータの保持 カーネル内ではxt_tableというデータで保持されている タスクからのアクセスはnetns_ipv4経由で task_struct->ns_proxy->net_ns->ipv…

ソースルーティング

IPのオプションを指定してLinuxで経路を指定してパケットを出す方法を調べてみた 設定方法 IPのオプションを指定する方法は以下の2通りがある ソケット単位に指定する setsockoptでIP_OPTIONSを指定する パケット単位で設定を変える sendmsgのstruct msghdr-…

iptables勉強(2)

iptablesのtargetrの拡張 iptablesだいぶわかってきたので最小構成のtargetを書いてみた 構成ファイル user空間用とkernel空間用の2種類のファイルを用意する必要がある user空間用ファイル iptablesコマンドを拡張するために /lib64/xtables/libに共有ライ…

iptables勉強

ユーザ空間から IPTablesのチェインの取り出し。 とりあえずなんとなくとれるようになったので今日はここまで。 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <net/if.h> #include <getopt.h> #include <stdlib.h> #include <linux/netfilter_ipv4.h> #include <linux/netfilter_ipv4/ip_tables.h> #include </linux/netfilter_ipv4/ip_tables.h></linux/netfilter_ipv4.h></stdlib.h></getopt.h></net/if.h></string.h></netinet/in.h></sys/socket.h></sys/types.h>

linux arpの内部データ

arpの統計情報が欲しかったのでnetlink経由で取得するものを作った NDTA_PARMSはrtattrが入れ子になっている。 #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h> #include <linux/neighbour.h> #include <linux/rtnetlink.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #in…</string.h></stdlib.h></stdio.h></unistd.h></stdlib.h></linux/rtnetlink.h></linux/neighbour.h></linux/netlink.h></sys/socket.h></asm/types.h>

パケット遅延

tcpのport 53 synパケットのみを3秒遅延したい等 特定のパケットのみに遅延を適用させる方法。 条件設定にはtcを使って行う方法とiptablesのMARK経由で行う方法がある。 今回は遅延以外にもdropやreject(impパケットを返す)も別途行いたかったので 条件をま…