自分用メモ。Visual Studio 2008 Express Editionにて。
メインフォーム(ダミーなわけだけど)を配置したら、NotifyIconを配置。
アイコンからアプリケーションを操作するため、ContextMenuStripも配置。
メニューの中身は適当に実装してNotifyIconにくっつけておく。
で、フォームのプロパティで
WindowState を Minimized
ShowInTaskbar を False
にすると、起動してもフォームは表示されず、通知領域のアイコンのみ表示される。
趣旨は、WindowStateは起動時のフォームの状態で、これが最小化に設定されている。
でもShowInTaskbarがFalseなので表示されず、NotifyIconだけが残っている状態。
*最小化してもこういうの↓が表示されない=通知領域だけ表示
なので当然ながら、NotifyIconを設定し忘れていたり終了メニューを実装し忘れていたりすると
ユーザーに不親切なアプリケーションができあがる。
自動でダウンロードする方法は前々回の記事、cygwin の cron に移植した記録は前回の記事を参照してもらうこととして、
今回は ApacheLogViewer 用に整形します。
と言っても2列目をドメインに差し替えるだけですが。
なので、ドメインが1つだけの契約なら関係ありません。
ロリポップのくれたサブドメインと、独自ドメインと、独自ドメインのサブドメインがあるような状況を想定しています。
#!/bin/sh
cd /home/lolipop_log # .gzが日々落ちてくるディレクトリを指定
out=/home/lolipop_log/alv # 解凍したログを出力するディレクトリ
suffix=`date +"%s"`
suffix=`expr ${suffix} - 86400` # 前日のログを処理するので.
suffix=`echo ${suffix} | perl -ne '@t=localtime($_);printf("%d%02d%02d",@t[5]+1900,@t[4]+1,@t[3])'`
# バーチャルドメインを列記。
for domain in dphoge.lolipop.jp www.foo.net bar.net ;do
zcat ${domain}.${suffix}.gz | awk -vVAL=${domain} '$2=VAL {print $0}' > ${out}/${domain}.${suffix}.log
done
これを適当な名前で保存 -> chmod +x –> crontab –e で、ログを落としたあとの時刻に登録。
crontab –l するとこんな感じになっています。
SHELL=/bin/sh
45 23 * * * /home/lolipop_log/dl_lolipop_logs.sh
55 23 * * * /home/lolipop_log/format.sh
ps コマンドで扱えるのは cygwin にぶら下がっているプロセスだけなので、
cygwin からでも Windows のコマンドを使う。
・実行されているすべてのタスクを表示する
% tasklist
・それぞれのプロセスのサービスを表示する
% tasklist /SVC
* tasklist コマンドのオプションでプロセスの絞込みができるが、| grep のほうが自然なので割愛。
・特定のプロセスをkillする
% taskkill /PID 99999 /F
・特定のアプリケーションをすべてkillする(killall like)
% taskkill /IM notepad.exe /F
# Windows Live Writer Beta のテストを兼ねて投稿。
drm2wmv_eは複数のファイルを対象にできないので、1つずつ順番に作業するバッチを生成する。
作業用PCにはPerlを入れていないので自分用に作成。
復元キーを直接貼り付けるので、ソースを持って帰って自前の環境で動かしてください。
フォームの入力内容はSTDINで読んで処理してSTDOUTに吐くだけなので、ファイルに残したりログ取ったりはしていませんが。
->CGIソース
あくまで身内仕様につき不具合があっても知りません。
使用は自己責任で。
名前
tcptrace - TCPコネクション分析ツール
書式
tcptrace [options] filename
説明
tcptraceはコマンドライン上でtcpdumpファイル(または標準入力から)の詳細を
取得し、コネクションの概要を生成する。
オプション
出力形式オプション
-b 簡単な出力形式
-l 詳細な出力
-r print rtt statistics (大きなファイルは遅くなる)
-W ウィンドウサイズの予想を報告する (普通役に立たない)
-q 出力しない (モジュールの出力だけ欲しい場合)
グラフ描画オプション
-T スループットのグラフを作成する (10セグメント以上の平均、-Aを参照)
-R Round Trip Timeのグラフを作成する
-S タイムシーケンスのグラフを作成する
-N 輻輳ウインドウのグラフを作成する (ネットワーク上の輻輳データ)
-F セグメントサイズのグラフを作成する
-G すべてのグラフを作成する
出力形式の詳細オプション
-D 10進数で表示
-X 16進数で表示
-n ホストまたはサービス名の名前解決をしない (高速)
-s 短い名前を使う (リスト "picard.cs.ohiou.edu" は "picard" になる)
コネクションフィルタリングオプション
-iN コネクション番号Nを無視する (複数指定可能)
-oN[-M]
コネクション番号Nだけ(またはNからM)を対象にする。引数は複数指定可能。
Nは番号よりもむしろ、代わりにファイルからリストを読む。
-c 完結していないコネクション(SYNとFINが見つからない)を無視する
-BN 分析の最初のシーケンス番号 (デフォルト 1)
-EN 分析の最後のシーケンス番号 (デフォルト ファイルの最後)
グラフ描画の詳細オプション
-C カラー描画出力
-M モノクロ描画出力
-AN スループットグラフでN個のセグメントを平均する。デフォルトは10。
-z 0軸オプション:
-z 時間軸を時刻ではなく0からでプロットする (下位互換)
-zx 時間軸を時刻ではなく0からでプロットする
-zy シーケンス番号を0からでプロットする (タイムシーケンスグラフ専用オプション)
-zxy X軸、Y軸とも0からでプロットする
-y スループットグラフで、瞬間スループットの(黄色の)点を省略する
その他のオプション
-Z 生のrtt sample timesをファイルにダンプする
-p パケットの内容すべてを表示する (とても長くなり得る)
-P 選択したコネクションのパケットの内容を表示する
-t 進捗度をパケット数で刻む'tick' off the packet numbers as a progress indication
-v バージョン情報を表示して終了する
-w 警告を多く表示する
-d 動作中は合図する (デバッグ有効。さらに出力するには -d -d を使う)
-e 各TCPストリームの内容をファイルに抜き出す
-h ヘルプメッセージを表示する
-u 最小限のUDPの情報も表示する
-Ofile
マッチしたパケットをtcmdumpファイル 'file' にダンプする
+[v] -[v]の設定内容を逆にする (bool型用)
bool型の拡張オプション (未指定でもデフォルト値で動作)
--showsacks
タイムシーケンスのグラフでSACKブロックを表示する (デフォルト)
--noshowsacks
タイムシーケンスのグラフでSACKブロックを表示しない
--showrexmit
タイムシーケンスのグラフで再送をマークする (デフォルト)
--noshowrexmit
タイムシーケンスのグラフで再送をマークしない
--showoutorder
タイムシーケンスのグラフで破損をマークする (デフォルト)
--noshowoutorder
タイムシーケンスのグラフで破損をマークしない
--showzerowindow
タイムシーケンスのグラフでウィンドウが0をマークする (デフォルト)
--noshowzerowindow
タイムシーケンスのグラフでウィンドウが0をマークしない
--showurg
タイムシーケンスのグラフでURGENTビットがセットされたパケットをマークする (デフォルト)
--noshowurg
タイムシーケンスのグラフでURGENTビットがセットされたパケットをマークしない
--showrttdongles
Round Trip Time以外が生成した、特殊な記号付きACKをマークする
--noshowrttdongles
Round Trip Time以外が生成した、特殊な記号付きACKをマークしない (デフォルト)
--showdupack3
タイムシーケンスのグラフで3重複ACKをマークする (デフォルト)
--noshowdupack3
タイムシーケンスのグラフで3重複ACKをマークしない
--showzerolensegs
タイムシーケンスのグラフで長さが0のパケットを描画する (デフォルト)
--noshowzerolensegs
タイムシーケンスのグラフで長さが0のパケットを描画しない
--showzwndprobes
ウィンドウが0のProbeパケットを描画する (デフォルト)
--noshowzwndprobes
ウィンドウが0のProbeパケットを描画しない
--showtitle
グラフにタイトルを描画する (デフォルト)
--noshowtitle
グラフにタイトルを描画しない
--res_addr
IPアドレスの名前解決を行う (たぶん遅い) (デフォルト)
--nores_addr
IPアドレスの名前解決を行わない (たぶん遅いw)
--res_port
ポート番号の名前解決を行う (デフォルト)
--nores_port
ポート番号の名前解決を行わない
--checksum
IPとTCPのチェックサムを検証する
--nochecksum
IPとTCPのチェックサムを検証しない (デフォルト)
--dupack3_data
運ぶデータの重複したACKを3重複ACKとして数える
--nodupack3_data
運ぶデータの重複したACKを3重複ACKとして数えない (default)
--check_hwdups
ハードウェアの重複をチェックする (デフォルト)
--nocheck_hwdups
ハードウェアの重複をチェックしない
--warn_ooo
パケットのタイムスタンプが破損していたら警告を表示する
--nowarn_ooo
パケットのタイムスタンプが破損していても警告を表示しない (default)
--warn_printtrunc
パケットが分析には短すぎる場合に警告を表示する
--nowarn_printtrunc
パケットが分析には短すぎる場合でも警告を表示しない (default)
--warn_printbadmbz
0であるべきTCPの列が0でない場合に警告を表示する
--nowarn_printbadmbz
0であるべきTCPの列が0でない場合でも警告を表示しない (default)
--warn_printhwdups
ハードウェアの重複を警告する
--nowarn_printhwdups
ハードウェアの重複を警告しない (default)
--warn_printbadcsum
パケットのチェックサムが不一致なら警告を表示する
--nowarn_printbadcsum
パケットのチェックサムが不一致でも警告を表示しない (default)
--warn_printbad_syn_fin_seq
SYNかFINが異なるシーケンス番号で再送したとき警告を表示する
--nowarn_printbad_syn_fin_seq
SYNかFINが異なるシーケンス番号で再送したときでも警告を表示しない (default)
--dump_packet_data
パケットとTCP/UDPのダンプデータをすべて表示する
--nodump_packet_data
パケットとTCP/UDPのダンプデータを表示しない (default)
--continuous
連続的に実行し、概要を提供しない
--nocontinuous
連続実行はせず、概要を提供する (default)
--print_seq_zero
最初のシーケンス番号からのオフセットで表示する
--noprint_seq_zero
シーケンス番号をオフセットではなく本来の値で表示する (default)
--limit_conn_num
リアルタイムモードで一度に保持するコネクションに上限を設ける
--nolimit_conn_num
リアルタイムモードで一度に保持するコネクションに上限を設けない (default)
--xplot_all_files
生成したすべてのxplotファイルを最後に表示する
--noxplot_all_files
生成したすべてのxplotファイルを最後に表示しない (default)
--ns_hdrs
nsのuseHeadersフラグがtrueだと仮定する (IP+TCP ヘッダを使う) (default)
--nons_hdrs
nsのuseHeadersフラグがfalseだと仮定する
--csv
長い出力をカンマ区切りデータとして表示する
--nocsv
長い出力をカンマ区切りデータとして表示しない (default)
--tsv
長い出力をタブ区切りデータとして表示する
--notsv
長い出力をタブ区切りデータとして表示しない (default)
拡張変数オプション (未指定でもデフォルト値で動作)
--output_dir=``STR''
すべての出力ファイルが配置されるディレクトリ (default: '
--output_prefix=``STR''
この文字列がすべての出力ファイルの接頭辞 (default: '
--xplot_title_prefix=``STR''
すべての xplot ファイルに付けられる接頭辞 (default:
'
--update_interval=``STR''
リアルタイムモードで、更新する時間間隔 (default: '
--max_conn_num=``STR''
リアルタイムモードで一度に保持するコネクションの最大数 (default: '
--remove_live_conn_interval=``STR''
リアルタイムモードで、開いている接続が外されるまでのアイドルタイム (default: '
--remove_closed_conn_interval=``STR''
リアルタイムモードで、閉じている接続が外されるまでの時間間隔 (default: '
--xplot_args=``STR''
tcptrace から xplot を呼び出すときに渡す引数 (default: '
--sv=``STR''
長い出力を、STRに設定された値で分割する (default: '
含まれているモジュール
http Http分析モジュール
tcplib TCPLib分析モジュール
traffic トラフィック分析モジュール
slice 時間で区切ったトラフィック効率データ
rttgraph RRT分析モジュール
collie コネクション概要モジュール
realtime リアルタイムモードの例
モジュールの詳細なオプションは `tcptrace -hxargs` を使ってください。
フィルター変数:
フィルター変数の完全なリストは 'tcptrace -hfilter' を使ってください。
フィルター文法:
フィルターの文法は 'tcptrace -hfilter' を使ってください。
環境変数
オプションは、まず (存在すれば) $HOME/.tcptracerc を読み、そして (存在
すれば) 環境変数 TCPTRACEOPTS を読み、最後にコマンドラインから読む。
著者
Shawn Ostermann (ostermann@cs.ohiou.edu)
CREDITS
Thanks to Mark Foster (mafoster@george.arc.nasa.gov) for writing this
manual page. Thanks to Avinash Lakhiani (alakhian@irg.cs.ohiou.edu) for
updating it.
ファイル
ダンプファイル名
あとに続く引数を、ひとつ以上のファイル名になるように取ります(認識はされていない)。
ファイルは圧縮されていてもかまわない。設定は compress.h を参照。
ダンプファイルの名前が 'stdin' なら、ファイルではなく標準入力から読み込む。
関連項目
xplot tcptrace から出力された .xpl ファイルを調べる対話型ツール。
jPlot xplotのJava版。
翻訳者
http モジュール:
使いかた:
-xHTTP[P] HTTPのトラフィック情報を表示する (ポートP、デフォルトは80)
traffic モジュール:
使いかた:
-xtraffic"[ARGS]" 全体のトラフィックの情報を表示する
モジュールの引数書式:
-iS 統計の間隔を S(float) 秒に設定する。デフォルトは15.0。
-pP ポート番号Pの情報を含める
-pP1-P2 ポート番号が [P1-P2] の範囲の情報を含める
-p-P ポート番号Pの情報を除く
-p-P1-P2 ポート番号が [P1-P2] の範囲の情報を除く
-pSPEC,SPEC commas chain together specs
-G すべてのグラフを生成する
-A 'アクティブコネクション' のグラフを生成する
-B 'bps(bytes per second)' のグラフを生成する
-C 'opens and closes' のグラフを生成する
-H 'halfopen connections' のグラフを生成する
-K 'pure acKs/second' のグラフを生成する
-L 'losses per second' のグラフを生成する
-O 'open connections' のグラフを生成する
-I 'instantaneous open connections' のグラフを生成する
-P 'packets per second' のグラフを生成する
-Q 'idle (Quiet) connections' のグラフを生成する
-R[MIN[-MAX]]'round trip time' のグラフを生成する
with args, ignore samples outside MIN to MAX (in ms)
-T 'total data' のグラフを生成する。
-D[SECS] 長く持続したコネクションのグラフを生成する。「長く」のデフォルトの定義は60秒。
-d このモジュールのローカルデバッグを有効にする
例
-xtraffic" -p23" ポート23だけ
-xtraffic" -p1-1023" ポート1-1023だけ
-xtraffic"-p1-1023,-10-20 -L -O" ポート1-1023からポート10-20を除いたものだけ
ポート番号を明示的に指定しなければすべてのポートが含まれる。
With ANY spec, all ports are initially EXCLUDED
slice モジュール:
使いかた:
-xslice"[ARGS]" sliceのデータ情報を表示する
モジュールの引数書式:
-iS slice の間隔を S (float) 秒に設定する。デフォルトは15.0。
-d このモジュールのローカルデバッグを有効にする
-tb 日付と時刻を簡単な形式で表示
-tl 日付と時刻をUnix形式で長く表示
-tu 日付と時刻をエポック秒で表示 (secs)
-tU 日付と時刻をエポック秒で表示 (secs.usecs)
rttgraph モジュール:
使いかた:
-xrttgraph rttgraphトラフィックについての情報を表示
collie モジュール:
使いかた:
-xcollie"[-ln] コネクションの概要を提供する
-l attach labels
-n no labels please
realtime モジュール:
使いかた:
-xrealtime リアルタイム tcptrace の使い方を示すモジュールの例
フィルター変数:
変数名 種類 説明
----------------- -------- -----------------------
hostname STRING 完全修飾ドメイン名 (-n は除く)
portname STRING ポートのサービス名 (-n は除く)
port UNSIGNED ポート番号
mss SIGNED 最大セグメントサイズ
f1323_ws BOOL 1323 window scaling requested
f1323_ts BOOL 1323 time stampts requested
fsack_req BOOL SACKs requested
window_scale BOOL window scale factor
bad_behavior BOOL bad TCP behavior
data_bytes UNSIGNED bytes of data
data_segs UNSIGNED segments of data
data_segs_push UNSIGNED segments with PUSH set
unique_bytes UNSIGNED non-retransmitted bytes
rexmit_bytes UNSIGNED retransmitted bytes
rexmit_segs UNSIGNED segments w/ retransmitted data
ack_segs UNSIGNED segments containing ACK
pureack_segs UNSIGNED segments containing PURE ACK (no data/syn/fin/reset)
win_max UNSIGNED MAX window advertisement
win_min UNSIGNED MIN window advertisement
win_zero_ct UNSIGNED 0が広告されたウィンドウの数
min_seq UNSIGNED シーケンス番号の最小値
max_seq UNSIGNED シーケンス番号の最大値
num_sacks UNSIGNED number of ACKs carrying SACKs
max_sacks UNSIGNED most SACK blocks in a single ACK
segs UNSIGNED total segments
packets UNSIGNED total segments
syn_count UNSIGNED SYNs sent
fin_count UNSIGNED FINs sent
reset_count UNSIGNED RESETs sent
min_seg_size UNSIGNED smallest amount of data in a segment (not 0)
max_seg_size UNSIGNED largest amount of data in a segment
out_order_segs UNSIGNED out of order segments
sacks_sent UNSIGNED SACKs sent
ipv6_segs UNSIGNED number of IPv6 segments sent
max_idle UNSIGNED maximum idle time (usecs)
num_hw_dups UNSIGNED number of hardware-level duplicates
initwin_bytes UNSIGNED number of bytes in initial window
initwin_segs UNSIGNED number of segments in initial window
rtt_min UNSIGNED MIN round trip time (usecs)
rtt_max UNSIGNED MAX round trip time (usecs)
rtt_count UNSIGNED number of RTT samples
rtt_min_last UNSIGNED MIN round trip time (usecs) (from last rexmit)
rtt_max_last UNSIGNED MAX round trip time (usecs) (from last rexmit)
rtt_count_last UNSIGNED number of RTT samples (from last rexmit)
rtt_amback UNSIGNED number of ambiguous ACKs
rtt_cumack UNSIGNED number of cumulative ACKs
rtt_unkack UNSIGNED number of unknown ACKs
rtt_dupack UNSIGNED number of duplicate ACKs
rtt_nosample UNSIGNED ACKs that generate no valid RTT sample
rtt_triple_dupack UNSIGNED number of triple duplicate ACKs (fast rexmit)
retr_max UNSIGNED MAX rexmits of a single segment
retr_min_tm UNSIGNED MIN time until rexmit (usecs)
retr_max_tm UNSIGNED MAX time until rexmit (usecs)
trunc_bytes UNSIGNED number of bytes not in the file
trunc_segs UNSIGNED number of segments not in the file
num_zwnd_probes UNSIGNED number of zero window probes
zwnd_probe_bytes UNSIGNED number of window probe bytes
urg_data_pkts UNSIGNED Number of packets with URGENT bit set
urg_data_bytes UNSIGNED Number of bytes of urgent data
hostaddr IPADDR IP Address (v4 or v6 in standard textual notation
thruput UNSIGNED スループット (バイト/秒)
フィルター文法:
numbers:
変数:
上の表 c_を頭につければクライアント側 s_を付ければサーバー側
b_は両方とも。
e_はどちらか。
デフォルトは何もついていない。
anything from the above table with a prefix of either 'c_' meaning
the one for the Client or 's_' meaning the value for the Server. If
the prefix is omitted, it means "either one" (effectively becoming
"c_VAR OR s_VAR)"). As shorthand for a conjunction instead, you can
use the syntax 'b_' (as in b_mss>100), meaning 'B'oth, (effectively
becoming "c_VAR AND s_VAR)"). For completeness, 'e_' means 'E'ither,
which is the normal default with no prefix.
定数:
文字列: ダブルクォーテーションで囲ったもの何でも
真偽値: TRUE FALSE
数: 符号付き/符号なしの定数
算術演算子:
any of the operators + - * / %
performed on 'numbers'. Normal operator precedence
is maintained (or use parens)
関係演算子
any of < > = != >= <= applied to 'numbers'
論理演算子
AND, OR, NOT applied to the relational operators above
その他
優先度がわからなければ括弧を使う。
とにかく括弧を使っておけば私よりかっこいいはず! :-)
you'll probably need to put the '-fexpr' expression in single quotes
matched connection numbers are saved in file PF for later processing
with '-oPF' (for graphing, for example). This is helpful, because
all the work is done in one pass of the file, so if you graph while
using a filter, you'll get ALL graphs, not just the ones you want.
Just filter on a first pass, then use the "-oPF" flag with graphing
on the second pass
most common synonyms for NOT, AND, and OR also work (!,&&,||,-a,-o)
(for those of us with very poor memories
例
tcptrace '-fsegs>10' file
tcptrace '-fc_segs>10 OR s_segs>20 ' file
tcptrace '-f c_segs+10 > s_segs ' file
tcptrace -f'thruput>10000 and segs > 100' file
tcptrace '-fb_segs>10' file
*<server>はドメイン名に置き換えること。
<?
echo "<a href=device:gpsone?url=http://server/gpsinfo.php>送信</a>";
?>
2.GPS情報はGETメソッドで送信されるので、次の変数に代入されている。
*Perlの場合は、GETメソッド解釈ー>name:valueで対応づけてハッシュに代入すると良い。
$_GET["ver"]
$_GET["datum"]
$_GET["unit"]
$_GET["lat"]
$_GET["lon"]
$_GET["alt"]
$_GET["time"]
$_GET["smaj"]
$_GET["smin"]
$_GET["vert"]
$_GET["majaa"]
$_GET["fm"]
gpsinfo.phpの例:
<?
$lat=$_GET["lat"];
$lon=$_GET["lon"];
chop($lat);/
chop($lon);
$lat_s = explode(".", $lat);
$lon_s = explode(".", $lon);
$lat_deg=$lat_s[0]+$lat_s[1]/60+$lat_s[2]/3600+$lat_s[3]/360000;
$lon_deg=$lon_s[0]+$lon_s[1]/60+$lon_s[2]/3600+$lon_s[3]/360000;
echo "$_GET["ver"]<br>";
echo "$_GET["datum"]<br>";
echo "$_GET["unit"]<br>";
echo "$lat_s[0]度$lat_s[1]分$lat_s[2]秒$lat_s[3]<br>";
echo "$lon_s[0]度$lon_s[1]分$lon_s[2]秒$lon_s[3]<br>";
echo "$lat_deg<br>";
echo "$lon_deg<br>";
echo "$_GET["alt"]<br>";
echo "$_GET["time"]<br>";
echo "$_GET["smaj"]<br>";
echo "$_GET["smin"]<br>";
echo "$_GET["vert"]<br>";
echo "$_GET["majaa"]<br>";
echo "$_GET["fm"]<br>";
echo "<a href=http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q=$lat_deg,$lon_deg>GoogleMapsで表示</a>";
echo "<br>";
?>
/etc/postinstall/gnuplot.sh
あたりを何かしているところで止まる。
(他にも2つぐらい、止まってしまうシェルスクリプトがあったけれど名前忘れた)
セットアップをいったんキャンセルして、Explorer 上で問題のシェルスクリプトをどこかに移動。
で、もう一度セットアップを実行。
この繰り返しでOK。
移動したシェルスクリプトが気になるなら、インストール後に元の位置に戻して、
cygwin 上からパスを指定して実行してやる。
C:\cygwin\bin\ash.exe を起動。
$ /bin/rebaseall
を実行。
プロンプトが戻ってきたらOK。
cygwin 付属の cygwin1.dll を使わせれば良いだけだった。
copy /Y C:\cygwin\bin\cygwin1.dll <携帯動画変換君の cygwin1.dll のあるパス>
#cygz.dllも消したほうがいいのかな?
以前の
ロリポップ(lolipop)のアクセスログを自動ダウンロードする(Linux+wget+Perl)
を cygwin 環境で動かすことにした。
ログをダウンロードするパスと、文字コードを確認したら cygwin の cron に登録。
% crontab -e
で、cron を Windows のサービスとして起動。
% cygrunsrv --install cron --path /usr/sbin/cron --args -D
cron 起動は
cygrunsrv --start cron
でも、Windows の「管理」-「サービス」で起動させても同じことなので好きなほうで。
終わり。
