JDBな人生  専門的なことから日常的なことまで~ まぁ自由きままに書いていきます。
2017年08月 / 07月<< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>09月

アクセスランキング

[ジャンルランキング]
コンピュータ
476位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
63位
アクセスランキングを見る>>

MTU調整ソフト(一応Windows 7対応)


また、よくわからないものを作ってしまいました。
(昨日の夜思いついて、3時間くらいで完成しました)

MTUを弄って少しインターネットが早くなるかもしれないというソフトです。

この手のソフトは既に色々と流通しているんですが、作るソフトの題材としては丁度良いものだったので。
(pingの送信・レジストリの読み書きなど)

110211MTU設定

このソフトを利用するメリットのある人は、次の条件に当てはまる人です。
・ブロードバンドでインターネットに接続している(ADSLや光回線、ケーブルテレビなど)
・OSはVistaでも7でもない(Vistaや7は設定を変えてもほとんど効果は期待できません)
・この手のソフトを使っていない(使っていたらその値を変更する必要はないはず)

というわけで、まずJDBは該当しません。
よって、このソフトウェアで本当にインターネットが高速になるのか、検証していません。

まあ、VB.NETでレジストリを弄る方法を練習したかっただけなので。(以前はサンプルを拾ってきただけでした)

というわけで、使って効果が期待できるかわかりませんが、一応使うだけ使ってみたいという方は以下からどうぞ。
http://soft.g-c-c.info/JDB/settingMTU.exe
※.NET Framework 3.5が必要です。

一応確認メッセージも出ますが、レジストリを弄っているので、それが原因で何らかのトラブルが発生してもJDBは責任を負いません。(まあ普通は発生しませんが)

こんなソフトのソースを公開する価値があるのかわかりませんが、もし参考にしたいという方がいた時のために公開しておきます。(無駄な処理などあるかもしれませんが、そこはスルーしてやってください。)

more...

Public Class Form1
    Dim Ping As System.Net.NetworkInformation.Ping = Nothing
    Dim bestMTU As Integer = Nothing
    Dim hostnameToPing As String = "www.google.co.jp"
    Dim regkeypath As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards"
    Dim regkeypath2 As String = "SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces"
    Dim iid As String = ""
    Dim nan As String = ""
    Dim ncs As Hashtable = New Hashtable

    Function sendingPing(ByVal hostname As String, ByVal ttl As Integer, ByVal bytes As Integer)
        If Ping Is Nothing Then
            Ping = New System.Net.NetworkInformation.Ping()
        End If

        Dim opts As New System.Net.NetworkInformation.PingOptions(ttl, True)
        Dim bs As Byte() = System.Text.Encoding.ASCII.GetBytes(New String(" ", bytes))

        Dim reply As System.Net.NetworkInformation.PingReply = Ping.Send(hostname, 5000, bs, opts)
        If reply.Status = System.Net.NetworkInformation.IPStatus.Success Then
            Return True
        Else
            Return False
        End If

        'Ping.SendAsync(hostname, 5000, bs, opts, Nothing)

    End Function

    Sub setMTU()
        If (iid = "") Then
            MsgBox("ネットワークアダプタを選択してください。")
            Exit Sub
        End If

        Dim regkey As Microsoft.Win32.RegistryKey = _
            Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regkeypath2 & "\" & iid, True)
        If regkey Is Nothing Then
            MsgBox("ERROR")
            Exit Sub
        End If

        If Not (regkey.GetValue("MTU") Is Nothing) Then
            If (MsgBox("既にMTUが設定されています。[" & regkey.GetValue("MTU") & "]" & vbCrLf & "上書きしますか?", MsgBoxStyle.YesNo) <> MsgBoxResult.Yes) Then
                Exit Sub
            End If
        End If

        If MessageBox.Show("「" & nan & "」のMTUを[" & (Integer.Parse(MTUValue.Value) + 28).ToString & "]に設定します。" & vbCrLf & "(レジストリに直接書き込みます。" & "自己責任で実行してください。)", "確認", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
            regkey.SetValue("MTU", (Integer.Parse(MTUValue.Value) + 28), Microsoft.Win32.RegistryValueKind.DWord)
        Else
            Exit Sub
        End If

        regkey.Close()
        MsgBox("完了")
        
    End Sub

    Sub deleteMTU()
        If (iid = "") Then
            MsgBox("ネットワークアダプタを選択してください。")
            Exit Sub
        End If

        Dim regkey As Microsoft.Win32.RegistryKey = _
            Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regkeypath2 & "\" & iid, True)
        If regkey Is Nothing Then
            MsgBox("ERROR")
            Exit Sub
        End If

        If (regkey.GetValue("MTU") Is Nothing) Then
            MsgBox("MTUは設定されていません。")
            Exit Sub
        Else
            If MessageBox.Show("「" & nan & "」のMTUの値を削除します。" & vbCrLf & "(レジストリを直接操作します。" & "自己責任で実行してください。)", "確認", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                regkey.DeleteValue("MTU", False)
            Else
                Exit Sub
            End If
        End If

        regkey.Close()
        MsgBox("完了")
    End Sub

    Sub findNA()
        ncs = New Hashtable
        ListBox1.Items.Clear()

        Dim regkey As Microsoft.Win32.RegistryKey = _
            Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regkeypath, False)
        If regkey Is Nothing Then
            MsgBox("ネットワークカードが登録されていません。")
            Exit Sub
        End If

        For Each s As String In regkey.GetSubKeyNames
            Dim regkey2 As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regkeypath & "\" & s, False)
            ncs.Add(regkey2.GetValue("Description"), regkey2.GetValue("ServiceName"))
            regkey2.Close()
        Next

        regkey.Close()


        For i As Integer = 0 To ncs.Count - 1
            ListBox1.Items.Add(ncs.Keys(i))
        Next
    End Sub

    Sub getMTU()
        Try
            If sendingPing(hostnameToPing, 64, 1) = False Then
                MsgBox("インターネットへ接続されていることを確認してください。" & vbCrLf & "または、利用するサーバーを変更してください。")
                Exit Sub
            End If

            Dim okMTU As Integer = 1000
            Dim nowMTU As Integer = 1000
            Dim tf As Boolean = False
            Dim sbs As Integer = 100
            Dim mode As Integer = 2

            Dim count As Integer = 0

            While tf = False

                If (sendingPing(hostnameToPing, 64, nowMTU)) Then
                    nowMTU += sbs
                Else
                    Select Case mode
                        Case 0
                            nowMTU -= sbs
                            okMTU = nowMTU
                            tf = True
                        Case 1
                            nowMTU -= sbs
                            sbs = 1
                            mode = 0
                        Case 2
                            nowMTU -= sbs
                            sbs = 10
                            mode = 1
                    End Select
                End If

                MTUValue.Value = Decimal.Parse(nowMTU)
                Me.Update()
                Threading.Thread.Sleep(150)

            End While

            bestMTU = okMTU

        Catch ex As Exception
            MsgBox("エラーが発生しました。値を取得できません。" & ex.ToString)
        End Try
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim os As System.OperatingSystem = System.Environment.OSVersion
        If usingServer.Items.Count <> 0 Then
            usingServer.SelectedIndex = 0
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            findNA()
            Me.Cursor = Cursors.Default
        Catch ex As Exception

        End Try

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            getMTU()
            Me.Cursor = Cursors.Default
        Catch ex As Exception

        End Try

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            setMTU()
            Me.Cursor = Cursors.Default
        Catch ex As Exception

        End Try

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            deleteMTU()
            Me.Cursor = Cursors.Default
        Catch ex As Exception

        End Try

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Try
            nan = ListBox1.SelectedItem
            iid = ncs(nan)
        Catch ex As Exception

        End Try
    End Sub

    Private Sub usingServer_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles usingServer.SelectedIndexChanged
        hostnameToPing = usingServer.Text
    End Sub
End Class
 


 
   JDB's software    TB(0)    CM(0)    EDIT    ページ↑

コメント投稿


 管理者だけに表示

コメント

トラックバック

この記事へのトラックバック:

プロフィール

JDB Luigi

Author:JDB Luigi
どこにでもいるようなありふれた人間・・・という訳でもなく、かと言って怪しい宗教を信仰する変人という訳でも無い。

基本的に掲載しているコード等は煮ていただいても焼いていただいても結構ですが、利用は自己責任にてお願いいします。
また、バグ・アドバイス等もしあればよろしくお願いします。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。