VB.netでパケットキャプチャーを作ってみる

VB.netでパケットキャプチャーを作ってみる

[C#] System.Net.Sockets.Socketを使ってパケットモニタ (3)
こちらのサイトを参考にしました

目的
 ・開いたサイトのアドレスとかもリアルタイムで分かるのでコメントビューアに使いたかった
 ・通信内容が直で分かるので、ニコ生のゲットプレーヤーステータスが暗号化されてても接続できるようにする
です。

これが書いたソースです。

    Private Sub Test()
        Dim ip As String = "192.168.11.2"

        Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)

        socket.Bind(New IPEndPoint(IPAddress.Parse(ip), 0))
        socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AcceptConnection, True)
        socket.IOControl(IOControlCode.ReceiveAll, New Byte() {1, 0, 0, 0}, New Byte() {0, 0, 0, 0})

        Dim buffer As Byte() = New Byte(4096) {}
        Dim k As Integer

        Do
            socket.Receive(buffer)

            Dim message As String = Encoding.UTF8.GetString(buffer)
            'Console.WriteLine(message) '←何故かココでプログラムが止まってしまう。原因教えて下さい


            '送信元IP
            Dim source As String = String.Format("{0}.{1}.{2}.{3}", buffer(12), buffer(13), buffer(14), buffer(15))
            '送信先IP
            Dim destination As String = String.Format("{0}.{1}.{2}.{3}", buffer(16), buffer(17), buffer(18), buffer(19))


            If message.Contains("<chat") = True AndAlso source.Contains(ip) = False Then

                'For Each item As String In buffer
                '    Console.WriteLine(item)
                'Next

                Dim dstPort10 As String = Convert.ToString(buffer(22), 16) & Convert.ToString(buffer(23), 16)
                Dim srcPort10 As String = Convert.ToString(buffer(20), 16) & Convert.ToString(buffer(21), 16)
                Dim dstPort As Integer = Convert.ToInt32(dstPort10, 16)
                Dim srcPort As Integer = Convert.ToInt32(srcPort10, 16)


                Dim match = System.Text.RegularExpressions.Regex.Match(message, "thread=""(?<thread>[0-9]+)""")
                Dim thread As Integer = CInt(match.Groups("thread").Value)


                Console.WriteLine()
                Console.WriteLine(k)
                Console.WriteLine("送信元{0}  -  送信先{1}", source, destination)
                Console.WriteLine("ポート{0}  -  {1}", srcPort, dstPort)
                Console.WriteLine("スレッド{0}", thread)
                k = k + 1
            End If


        Loop
    End Sub

はいこれが、パケットキャプチャーのソースです。
以下説明

自分のIP

        Dim ip As String = "192.168.11.2"

messageの中にはパケットのバイナリ?をUTF-8でエンコードした物が一応入ってます。

Dim message As String = Encoding.UTF8.GetString(buffer)
'Console.WriteLine(message) '←何故かココでプログラムが止まってしまう。原因教えて下さい

bufferの中にパケットの16進数(バイナリ?)を10進数に直した1バイトが入ってます。
(写真1)

12,13,14,15 送信元
16,17,18,19 送信先アドレス
が.区切り?で入ってるのでIPの形に直して入れます。
(写真2)

            '送信元IP
            Dim source As String = String.Format("{0}.{1}.{2}.{3}", buffer(12), buffer(13), buffer(14), buffer(15))
            '送信先IP
            Dim destination As String = String.Format("{0}.{1}.{2}.{3}", buffer(16), buffer(17), buffer(18), buffer(19))

messageの中にコメントで使われる形式の”
っとなっているので、threadの値を正規表現で取ります。

                Dim match = System.Text.RegularExpressions.Regex.Match(message, "thread=""(?<thread>[0-9]+)""")
                Dim thread As Integer = CInt(match.Groups("thread").Value)

以上です。ありがとうございました。

VB.netで正規表現を使って文字列を見つける方法2

前回は正規表現で文字列を一つだけ取りましたね?

今回は全部取ってみたいと思います。

前回の続きで書いていきます。

まず、ボタン2を置きます。(無い場合はテキストボックスをフォームに置きます。)
前回読んだ人はスルーしてください。
テキストボックスには↓ココから

<li><a href="html/index.html">トップページ</a></li>
<li><a href="html/test.html">実験用テストページ</a></li>
<li><a href="hoge/index.html">テストのトップページ</a></li>
<li><a href="homu/homu.html">ほむほむ</a></li>

↑ココまで
を入れときます。

ボタン2のソースはこんな感じ

        '. $ ^ { [ ( | ) * + ?  を含む場合は、文字の前にをつける 例: (1)→((?<value>[0-9]*)
    
        '<li><a href="html/index.html">トップページ</a></li>
        Dim pattern As String = "<li><a href=""(?<url>.*)"">(?<text>.*)</a></li>"
        Dim m As Match = Regex.Match(TextBox1.Text, pattern, RegexOptions.IgnoreCase Or RegexOptions.Compiled)

        Do While m.Success

            Console.WriteLine("URL:{0}  -  タイトル:{1}", m.Groups("url").Value, _
                                                      m.Groups("text").Value)

            m = m.NextMatch()
        Loop

1
実行すると…

URL:html/index.html – タイトル:トップページ
URL:html/test.html – タイトル:実験用テストページ
URL:hoge/index.html – タイトル:テストのトップページ
URL:homu/homu.html – タイトル:ほむほむ

全部出てくれましたね!
こんな感じで、難しい事書かなくてもできます。

ね?簡単でしょ?

VB.netで正規表現を使って文字列を見つける方法1

今回は正規表現を使って文字を抜き出したいと思います。
次回は正規表現を使って複数の文字を抜き出したいと思います。

まず、ボタンとテキストボックスをフォームに置きます。
テキストボックスには↓ココから

<li><a href="html/index.html">トップページ</a></li>
<li><a href="html/test.html">実験用テストページ</a></li>
<li><a href="hoge/index.html">テストのトップページ</a></li>
<li><a href="homu/homu.html">ほむほむ</a></li>

↑ココまで
を入れときます。

ボタン1のソースはこんな感じ

        '. $ ^ { [ ( | ) * + ?  を含む場合は、文字の前にをつける 例: (1)→((?<value>[0-9]*)
    
        '<li><a href="html/index.html">トップページ</a></li>
        Dim matchText = Regex.Match(TextBox1.Text, _
                                    "<li><a href=""(?<url>.*)"">(?<text>.*)</a></li>")



        Console.WriteLine(matchText.Groups("url").Value)
        Console.WriteLine(matchText.Groups("text").Value)
        '↑↓どちらでもおk
        'Console.WriteLine(matchText.Groups(1).Value)
        'Console.WriteLine(matchText.Groups(2).Value)

実行すると…

html/index.html
トップページ

って出ますね、足りないですね!
このソースだと1つしか出せないのです。

次は、正規表現を使って複数の物を抽出してみましょう!

どうでしたか?意外と簡単でしょ?
正規表現の書き方などは他のサイトを参考にしてください。

005SH用ハードケースを買ってみた。

前回の記事でも書いたように005SHのケースが売ってなかったので、帰って速攻Amazonで、ケースを注文しちゃいましたw

バッファローコクヨサプライ iBUFFALO GALAPAGOS 005SH用 ハードケース 液晶保護フィルム付 クリア BSMP05SHC01CR

↑これ。

使ってみた感想。
ひどい…

1、キーボードをスライドさせるところが擦れる。

このギザギザが付いてる所が引っかかるみたいで、ガリガリ言う

2、液晶の縁?みたいな奴を付けると液晶が剥がれる?(浮く?)

お分かり頂けただろうか?ピンぼけしてるけど・・・
この端っこの部分が浮いて気泡が入ってしまう…これは気に食わない

自分は気にくわないので、こんな感じに付けましたw。

本当はやっちゃダメだけど、どうしても気泡は嫌だったので…w

こう言うのを
拘らない OR その場しのぎ の人は良いんじゃないでしょうか?
個人的にはもうちょっと、しっかりしたのが欲しかったですね…w

まぁ、ぶっちゃけ、長期で使いたい人、気泡が気になる人にはオススメ出来ません。

次回は、USBタイプの充電器を紹介できたらいいなーっと思ってます。(未だに考え中…)

005SH買ってみた。

SoftBankから出てるAndroid携帯の005SH買っちゃいました。

QWERTYキーボードがどうしても欲しくて…w
結構ひどい的な評価だったんですけど、好奇心で買っちゃいましたw

まだ、使ってから3日ほどしか立ってないけど、Android携帯面白いですね!
タッチパネルってのが新鮮ですw

さて、ここからが本題。
自分が005SH買って最初に驚いた事をいくつか上げていきます。
今更、005SH買う人は少ないと思いますが、参考になると嬉しいですw

1、最初から、液晶保護フィルムが貼ってあった
  ってきり、貼ってないのかと思って、携帯買って速攻で買っちゃいましたw

2、005SH用のフィルムが少ない!
  某電気屋言ったのですが、003はあるのに、005だけは、極端に少なかったです。↑で書いた保護フィルムはラスト1枚でしたw

3、005SH用のケースが売ってなかった。
  電気屋寄ったついでに、買おうと思ったのですが、003用はあるのに、005は1つもなかった…(いじめですね!w)

4、起動に結構時間がかかった。
  1分位かかるかも?

5、バッテリーの消費が激しい。
  最初wi-fiを常に付けた状態で、フルに使ってると、6時間持ちませんでした。
  朝、100%にしても、10時間持ちませんでした。(45分間隔で触ってました(wi-fiは切ってある。))

6、コンビニで売ってるような、乾電池を使って充電するような奴が使えなかった
普通のUSB接続?(マウントしますか?的な奴)がでて充電できませんでした。

以上です。

まだ触って、3日しか立ってないので、もう少し触ったら色々不満点出てくるかも・・・

次は、Amazonで買った、005SH用のケースを紹介したいと思います。

ML110G6の起動時の轟音

起動時にすごいでかい音が出て五月蝿くてしょうがなかった。。。

ググッてみると、若干小さく出来るようなのでしてみた。
「Advanced → IPMI → Blow-out Feature を Disabled」
にすると静かになる!! … はずだった。。。

実際に変更して起動すると、なんと!常に轟音…
どゆことなの・・・と轟音PCを横目に見ながら、初期設定に戻したりしたけど駄目だった…

んで、行き着いたのが、コンセントを抜く!
これで、若干静かに起動出来ました。 (やったね!

設定を変えても轟音の人はコンセントを抜いてみてください、
幸せになれるかも!?

追伸:全面のUSB使うとキーボード類が動かなくなる…

VB.netでユニコードエスケープ(u~)を読めるようにしてみる

よくJSONなどで使われてる
「u5143u6c17u3067u3059u304buff1fuff01」
こんな奴。

ニコ動のAPIでエラーで帰ってる奴にこれが使われてたので、頑張って調べた結果…

分からなかった!(´・ω・`)

なので、5zjさんに教えてもらいましたw
コード

'u3042(あ)からuを抜いた文字列を入れる
Dim hoge As String = "3042"
Dim intData As Integer = Convert.ToInt32(hoge, 16)
Dim mozi As String = ChrW(intData)

終わり。

次は長い文字列から直してみる
作り方は簡単!文字列をuで区切ればいいだけ!
で、こうなった

        Dim mes As String = ""
        Dim txt As String = "u5143u6c17u3067u3059u304buff1fuff01"
        Dim stArrayData As String() = Split(txt, "u")

        For Each stData As String In stArrayData
            If stData.Length = 4 Then
                Dim intData As Integer = Convert.ToInt32(stData, 16)
                Dim mozi As String = ChrW(intData)
                'Console.WriteLine(mozi)
                mes = mes & mozi
            End If
        Next
        Console.WriteLine(mes)

実行すると、「元気ですか?!」って出てきてくるはずです。

出てきたら、終わりです。ありがとうございました。

余談で、

Dim hoge As String() = txt.Split(CChar("u"))

Dim hoge As String() = Split(txt, "u")

で結果が違った…気づくのに結構時間が掛かった…orz

ML110 G6 にWindowsXPを入れてみた

XPをインストールした直後にデバイスマネージャを見るとこんな感じになると思います。


イーサネットコントローラ が付属のCDでインストールできるのでします。

すると、「SMバスコントローラ」「ビデオコントローラ」「利用不可」*3つ 残ります。

利用不可を特定するためにシステム情報を見ます。
(見方:スタート→ファイル名を指定して実行で”msinfo32″と入力します。)

ここに出てるデバイスIDをググってやるとドライバが見つかります。

ググった結果
SM バス コントローラ:統合チップセット識別子 for Windows

ビデオ コントローラ (VGA 互換):Matrox-G200e on-board video driver for Windows* http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=18387&lang=jpn

利用不明(ACPIPNP0103): 1.BIOS上で高精度イベントタイマ(HPET)をdisableにする。 2.XPであればServivePack2以上を導入する。(今回は2にしました)

利用不明(ACPIIPI001):HP NULL IPMIコントローラー ドライバー for Windows Server 2003

利用不明(ACPIHPQ000B):HP ProLiant 100シリーズ マネジメント コントローラ ドライバ

参考資料:[HP ProLiant ML110 G6] サーバをWindowsServer2003にダウングレードした時、デバイスマネージャに?マークの「不明なデバイス」が表示される。 – Project Note
     http://x68stage.ddo.jp/casper/sunbbs/sunbbs.cgi?2100
     3流プログラマのメモ書き : HPのエントリサーバML110 G6のグラフィックドライバと最後に残る不明なドライバ
     http://jehupc.exblog.jp/13587005/
     その他デバイス - 不明のデバイス(PCIバス): Memory Receptacle 
     http://liroi.cocolog-nifty.com/blog/2009/05/pci-3371.html

上の5つは付属のCDでインストール出来ないので下のHPのサイトからドライバを持ってきます。
http://h20565.www2.hp.com/portal/site/hpsc/public/psi/swdHome/?sp4ts.oid=4344075

Microsoft Windows Server 2003をクリックし上記の名前のドライバをダウンロードします。
HP ProLiant 100シリーズ マネジメント コントローラ ドライバ
はそのままインストール出来ないので一回解凍して手動でインストールしてあげます。



以上終わりです。お疲れ様でした。
(余談ですが、よくフリーズして焦った…w)

ML110 G6 が家に来てから気づいた事

メモリが2GB×1本だった。
(1×2GB って書いてあったからてっきり 1GB×2本かと思ってた)

サウンドボードが入ってなかった。
今までのPCのは大抵オンボードであったので、おもいっきり眼中にありませんでしたw
(鯖PCの中では普通?)

LANケーブル挿すところが2つあって、USB近くにある奴しか動かなかった?
某人曰くBIOSの設定で変えられるらしい

終わり、次はWindows XP を入れようとしたお話