プログラミングの話題は「yuyarinのtopcoder記」で!
僕を追いかけたい方は Twitter へ!
2012年01月22日
2ch.netの接続障害とへ経路の揺れ
2012年01月21日の14時頃から2ちゃんねるのuni鯖など一部のサーバの板が閲覧不能に.0時前に回復するも断続的に接続不能になり,午前5時に再度接続不能状態が続いて現在に至る.
Megauploadに対する米当局の逮捕・閉鎖に抗議したanonymouseによる,政府系サイトやFBI,レコード会社系サイトへのDoS攻撃が行われているが(MailOnline, ITProPortal),これらのWebサイトがPIE(PacificInternetExchange)のデータセンターにあるため,同じデータセンターにある2ちゃんねるも攻撃の影響を受けている模様である.
同じく20日の19時頃から拙宅からwww.2ch.netに対する経路が大きく揺れている.具体的にはこれまでFreeBit,OCNからKDDI経由だったものがntt.net,gblx経由になっている.これが頻繁に切り替わっているようで,ASパスが変わったという自前アラートが鳴り止まない...
BGPのbest pathがAS32335の次でちょくちょく変わっているので,そのへんでなんか起きているんだろうなぁという感じ.下の2通りの間で時々切り替わっている.
4713 2516 4459 32335 2914 3549 23342 32335
↓自前アラート
www.2ch.net 206.223.154.230 from FreeBit 2012/01/22 04:06 1 10013 FreeBit Co.,Ltd. CIDR 219.99.81.171 tokyo2-9.ntt-poi.FreeBit.NET 6.0 ms 2 10013 FreeBit Co.,Ltd. CIDR 219.99.81.162 219.99.81.162 6.0 ms 3 10013 FreeBit Co.,Ltd. CIDR 122.152.1.177 te3-1.SR8.B9A.FreeBit.NET 9.0 ms 4 10013 FreeBit Co.,Ltd. CIDR 219.99.124.202 ae0.26.TR2.B9A.FreeBit.NET 18.0 ms 5 + 2914 NTT Communications Global IP Network 61.213.161.9 xe-5-0-3.a20.tokyjp01.jp.ra.gin.ntt.net 12.0 ms - 4713 OCN (AS4713) CIDR BLOCK 32 61.126.89.173 61.126.89.173 6 + 2914 NTT Communications Global IP Network 61.213.162.161 ae-6.r24.tokyjp01.jp.bb.gin.ntt.net 24.0 ms + 2914 NTT Communications Global IP Network 61.213.162.169 ae-6.r25.tokyjp01.jp.bb.gin.ntt.net - 4713 OCN (AS4713) CIDR BLOCK 86 118.23.146.201 118.23.146.201 7 + 20123 Dummy 129.250.2.20 ae-1.r20.tokyjp01.jp.bb.gin.ntt.net 11.0 ms + 20123 Dummy 129.250.2.72 ae-0.r21.tokyjp01.jp.bb.gin.ntt.net + 20123 Dummy 129.250.2.92 ae-9.r20.tokyjp01.jp.bb.gin.ntt.net + 20123 Dummy 129.250.3.222 ae-3.r23.osakjp01.jp.bb.gin.ntt.net - 4713 OCN (AS4713) CIDR BLOCK 86 118.23.168.69 118.23.168.69 8 + 20123 Dummy 129.250.2.2 ae-2.r20.osakjp01.jp.bb.gin.ntt.net 100.0 ms + 20123 Dummy 129.250.2.48 ae-7.r20.osakjp01.jp.bb.gin.ntt.net + 20123 Dummy 129.250.3.145 as-0.r21.lsanca03.us.bb.gin.ntt.net + 20123 Dummy 129.250.3.22 as-3.r20.lsanca03.us.bb.gin.ntt.net + 20123 Dummy 129.250.4.189 as-1.r20.sttlwa01.us.bb.gin.ntt.net + 20123 Dummy 129.250.4.44 as-2.r21.snjsca04.us.bb.gin.ntt.net - 4713 OCN (AS4713) CIDR BLOCK 19 210.254.187.198 210.254.187.198 9 + 20123 Dummy 129.250.2.164 as-2.r20.snjsca04.us.bb.gin.ntt.net 120.0 ms + 20123 Dummy 129.250.2.230 ae-1.r05.lsanca03.us.bb.gin.ntt.net + 20123 Dummy 129.250.3.197 as-1.r21.snjsca04.us.bb.gin.ntt.net + 20123 Dummy 129.250.5.47 ae-1.r05.sttlwa01.us.bb.gin.ntt.net + 20123 Dummy 129.250.5.55 ae-2.r06.snjsca04.us.bb.gin.ntt.net + 20123 Dummy 129.250.5.86 ae-2.r05.lsanca03.us.bb.gin.ntt.net - 4713 OCN (AS4713) CIDR BLOCK 9 210.163.230.98 210.163.230.98 10 + 20123 Dummy 129.250.5.13 ae-1.r06.snjsca04.us.bb.gin.ntt.net 120.0 ms + 1221 REACH (Customer Route) 64.208.110.222 verio-1.ar5.SEA1.gblx.net + 1221 REACH (Customer Route) 64.212.107.1 te6-4-10G.ar4.LAX1.gblx.net - 2516 KDDI 118.155.197.129 otejbb203.kddnet.ad.jp 11 + 20123 Dummy 204.245.39.34 204.245.39.34 127.0 ms + 1221 REACH (Customer Route) 208.178.58.201 te2-3-10G.ar3.SJC2.gblx.net + 1221 REACH (Customer Route) 64.212.107.1 te6-4-10G.ar4.LAX1.gblx.net + 22566 Proxy-registered route object 67.17.157.86 UNITED-LAYER.GigabitEthernet9-3.ar5.LAX1.gblx.net - 2516 KDDI 203.181.100.138 pajbb001.kddnet.ad.jp 12 + 20123 Dummy 204.245.39.34 204.245.39.34 134.0 ms + 23342 United Layer, Inc. 209.237.224.137 Vlan802.br2.sf7.unitedlayer.com + 23342 United Layer, Inc. 209.237.229.94 200p.maido3.net - 2516 KDDI 124.211.34.126 ix-pa8.kddnet.ad.jp 13 32335 Pacific Internet Exchange - Proxy Object 206.223.154.230 206.223.154.230 139.0 ms + 23342 United Layer, Inc. 209.237.224.137 Vlan802.br2.sf7.unitedlayer.com + 23342 United Layer, Inc. 209.237.229.94 200p.maido3.net - 2516 KDDI 124.215.192.106 124.215.192.106 14 32335 Pacific Internet Exchange - Proxy Object 206.223.154.230 206.223.154.230 128.0 ms - 4459 For Streamworks in LA 209.137.145.90 p2002090.kdd.net 15 32335 Pacific Internet Exchange - Proxy Object 206.223.154.230 206.223.154.230 136.0 ms 16 32335 Pacific Internet Exchange - Proxy Object 206.223.154.230 206.223.154.230 116.0 ms
購入: 4人 クリック: 7回
2012年01月07日
rrdtool fetchをフォーマットするzsh関数
ネットワークの監視のためにトラフィックのデータをmrtgやcactiでとっていると,生データを見たくなる時が時々あるのだけれども,rrdtool fetchのデフォルトの表示では分かり辛いのでフォーマットするzshの関数を書いてみた.
ひとまず1カラム目のUNIX timeをフォーマットする関数.
rrd-fetch () { rrdtool fetch $@ | gawk -F : '{ s = $1; if (match($1, /^[0-9]+/)>0) { cmd = "date -r "$1" +\"%Y/%m/%d %H:%M:%S\""; cmd | getline s; close(cmd);} print s, $2}' }
こっちはLinux用(dateコマンドの仕様が違うので)
rrd-fetch () { rrdtool fetch $@ | gawk -F : '{ s = $1; if (match($1, /^[0-9]+/)>0) { cmd = "date -d @"$1" +\"%Y/%m/%d %H:%M:%S\""; cmd | getline s; close(cmd);} print s, $2}' }
rrd-fetch-mb () { rrd-fetch $@ | gawk '{ s = $1" "$2; i=2; while (++i <= NF){ if (match($i, /nan/)==0) {s = s" "sprintf("% 7.1f",strtonum($i)*8/1024/1024) } else { s = s" nan" } } print s }' }
実行するとこんな感じ.
$ rrd-fetch-mb hoge.rrd AVERAGE 2012/01/06 23:35:00 249.2 428.3 2012/01/06 23:40:00 272.3 426.5 2012/01/06 23:45:00 241.5 445.9 2012/01/06 23:50:00 nan nan 2012/01/06 23:55:00 nan nan
2011年08月26日
Firefox6でTab Mix PlusとTree Style Tabを同時に使うとファビコンが潰れる問題
DOM Inspectorで調べてなんとなく調整してみた.アイコンというよりタブ自体にマージン,パディングが掛かっていてアイコンの描画領域が縦に潰れていた模様.
skin/classic/treestyletab/metal/base.css の 98 行目以降の .tab-icon padding を書き換え.上下10pxのパディングを2,0ぐらいにするといい感じ.
/* tab contents */ .tabbrowser-tabs[treestyletab-mode="vertical"] .tabbrowser-tab .tab-icon { margin: -10px -5px !important; padding: 2px 5px 0px 5px !important; }
とりあえずの応急処置で.
2011年08月21日
Rubyで直前の日曜日の日時を求める
rrdgraphで日曜日始まりの1週間グラフを書きたい時に必要なので.
UNIX時間で0,Time.at(0)がGMTで木曜日の0時なので3日とgmt_offset分だけ平行移動すると,日曜日の0時が1週間(7*86400)で割り切れる値になるので端数を除去,ずらした分だけ元に戻すと直前の日曜日の0時の時刻が得られる.
def last_sunday(t) slide = 3*86400 - t.gmt_offset t = t.to_i - slide return Time.at(t-t%(7*86400)) + slide end p Time.now p last_sunday(Time.now) p last_sunday(Time.now-86400)
% ruby last_sunday.rb Sun Aug 21 17:13:42 +0900 2011 Sun Aug 21 00:00:00 +0900 2011 Sun Aug 14 00:00:00 +0900 2011
2011年08月20日
Rubyでdijkstra法
Rubyでダイクストラ法を使って始点からの最短経路を求めることができるかもしれないコード
nodes = ["A", "B", "C", "D", "E"] connections = [ # [node1, node2, cost(1->2), cost(2->1)] ["A", "B", 6, 9], ["A", "C", 3, 2], ["B", "C", 2, 3], ["B", "D", 4, 1], ["C", "E", 3, 8], ["B", "E", 3, 2], ] require 'pp' def dijkstra(nodes, connections, start) inf = 100000 d = {} cost = {} used = {} prev = {} nodes.each{|n| d[n] = {} nodes.each{|m| d[n][m] = inf } cost[n] = inf used[n] = 0 } connections.each{|c| d[c[1]][c[0]] = c[2] ? c[2] : 1 d[c[0]][c[1]] = c[3] ? c[3] : (c[2]?c[2]:1) } cost[start] = 0 while true min_cost = inf nodes.each{|node| if used[node] == 0 && min_cost > cost[node] min_cost = cost[node] end } break if min_cost == inf nodes.each{|src| next if min_cost != cost[src] nodes.each{|dst| next if cost[dst] <= d[dst][src] + cost[src] cost[dst] = d[dst][src] + cost[src] prev[dst] = src } used[src] = 1 } end routes = {} nodes.each{|dst| route = [] node = dst while node != nil && node != start route << node node = prev[node] end routes[dst] = route.reverse } return routes end routes = {} nodes.each{|st| rs = dijkstra(nodes, connections, st) rs.each{|d,r| k = st+'-'+d routes[k] = [] m = st r.each{|n| routes[k] << m+'-'+n m = n } } } pp routes
{"B-A"=>["B-C", "C-A"],
"A-B"=>["A-B"],
"C-A"=>["C-A"],
"B-B"=>[],
"A-C"=>["A-C"],
"D-A"=>["D-B", "B-C", "C-A"],
"C-B"=>["C-B"],
"B-C"=>["B-C"],
"A-D"=>["A-B", "B-D"],
"E-A"=>["E-B", "B-C", "C-A"],
"D-B"=>["D-B"],
"C-C"=>[],
"B-D"=>["B-D"],
"A-E"=>["A-C", "C-E"],
"E-B"=>["E-B"],
"D-C"=>["D-B", "B-C"],
"C-D"=>["C-B", "B-D"],
"B-E"=>["B-E"],
"E-C"=>["E-B", "B-C"],
"D-D"=>[],
"C-E"=>["C-E"],
"E-D"=>["E-B", "B-D"],
"D-E"=>["D-B", "B-E"],
"E-E"=>[],
"A-A"=>[]}




