tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルインターネット
記事No8720
投稿日: 2009/02/12(Thu) 00:23
投稿者レオ♪

今、インターネット関連を勉強中なんですが。
Option Strict On
'2009_2_11
Imports System.Data.OleDb

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim isAvailable As Boolean
        isAvailable = My.Computer.Network.IsAvailable
        If isAvailable Then
            MsgBox("インターネットに接続されてます")
        Else
            MsgBox("インターネットに接続されてません")
        End If
    End Sub
End Class
まだやり始めなんですが。
ちょっと質問です。
VisualBasic2008で接続ルートを逆探知するプログラムはつくれますか?
例えば
NTT⇒プロバイダー(ソニー)⇒最終接続先
みたいな感じで。

[ツリー表示へ]
タイトルRe: インターネット
記事No8721
投稿日: 2009/02/12(Thu) 00:54
投稿者魔界の仮面弁士
> VisualBasic2008で接続ルートを逆探知するプログラムはつくれますか?

作れるかどうかは本人次第ですが、ネットワーク経路の調査自体は可能でしょう。

Microsoft Systems Management Server をお使いなら、pollprov と
System.Management 名前空間を通じて、WMI の PingPoller クラスを利用できるかと。

それが使えないなら、Process クラスから tracert コマンドを呼び出して、
そこから標準出力を受け取るようにするとか。

tracert.exe にも頼りたくなければ、下記を参考に Ping.Send メソッドを
PingOptions.Ttl を変えながら繰り返して呼び出す事で実装してみましょう。
(ホスト解決は Dns.GetHostEntry で)
http://net-juku.org/tcpip/tcpip89.html

[ツリー表示へ]
タイトルRe^2: インターネット
記事No8724
投稿日: 2009/02/13(Fri) 06:57
投稿者レオ♪
> > VisualBasic2008で接続ルートを逆探知するプログラムはつくれますか?
>
> 作れるかどうかは本人次第ですが、ネットワーク経路の調査自体は可能でしょう。
>
> Microsoft Systems Management Server をお使いなら、pollprov と
> System.Management 名前空間を通じて、WMI の PingPoller クラスを利用できるかと。
>
> それが使えないなら、Process クラスから tracert コマンドを呼び出して、
> そこから標準出力を受け取るようにするとか。
>
> tracert.exe にも頼りたくなければ、下記を参考に Ping.Send メソッドを
> PingOptions.Ttl を変えながら繰り返して呼び出す事で実装してみましょう。
> (ホスト解決は Dns.GetHostEntry で)
> http://net-juku.org/tcpip/tcpip89.html

   【全文引用を避け、必要な部分のみを引用するようにして下さ
スクリプトエラーでオンライン検索ができない。
もともと難しい感じですが。
この分野の勉強暦が3日なんで。
ところで魔界さん>2つだけ質問していいですか?
携帯三国志 or 携帯信長 ゲームをプレイされた事がありますか?
変な質問ですが^^

[ツリー表示へ]
タイトルRe^3: インターネット
記事No8727
投稿日: 2009/02/14(Sat) 03:00
投稿者魔界の仮面弁士
> ところで魔界さん
…妙な略し方をしないでいただきたい。(--#


> 2つだけ質問していいですか?
それは何のための質問なのでしょうか?

ここはVB.NETの掲示板ですので、VBと直接関係の無い話題は
板違いでしょう。それに、全文引用も避けるべきかと。


> スクリプトエラーでオンライン検索ができない。
スクリプトエラーというのが、何の事を指しているのか分かりませんが、
オンライン検索ができずとも、オフラインでの調査は可能ですよね。

少なくとも先の第2案(tracert)については、ローカルヘルプでも
十分に情報が得られる範囲だと思いますし。


とりあえず、第3案の実装例を作ってみました。VB2008 用。
フォームに TextBox, Button, BackgroundWorker, ListBox を貼っておいてください。


Imports System.ComponentModel
Imports System.Net
Imports System.Net.NetworkInformation

Public Class Form1
    Private Sub Form1_Load() Handles MyBase.Load
        TextBox1.Text = "www.google.co.jp"
        Button1.Text = "経路追跡"
        BackgroundWorker1.WorkerReportsProgress = True
    End Sub

    Private Sub Button1_Click() Handles Button1.Click
        Button1.Enabled = False
        ListBox1.Items.Clear()
        BackgroundWorker1.RunWorkerAsync(TextBox1.Text)
    End Sub

    Private Sub BackgroundWorker1_ProgressChanged(ByVal bgw As BackgroundWorker, ByVal e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        ListBox1.Items.Add(e.UserState.ToString())
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal bgw As BackgroundWorker, ByVal e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        Button1.Enabled = True
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal bgw As BackgroundWorker, ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Dim target As String = e.Argument.ToString()
        Dim msg As String

        Dim targetIP As IPAddress = Nothing
        Dim targetName As String
        If IPAddress.TryParse(target, targetIP) Then
            Dim host As IPHostEntry = Dns.GetHostEntry(targetIP)
            targetName = Nothing
        Else
            Dim host As IPHostEntry = Dns.GetHostEntry(target)
            targetName = host.HostName
            If host.AddressList.Length > 0 Then
                targetIP = host.AddressList(0)
            Else
                targetIP = IPAddress.None
            End If
        End If

        msg = targetIP.ToString()
        If targetName IsNot Nothing Then
            msg = targetName & "[" & msg & "]"
        End If
        bgw.ReportProgress(0, msg & " への経路を追跡しています。")

        Using pinger As New Ping()
            Dim maxHops As Integer = 30     '最大30経路まで追跡する
            Dim timeout As Integer = 3000   '3秒応答が無ければスキップ

            Dim timeToLive As Integer = 1
            Dim finished As Boolean = False
            Dim emptyBinary() As Byte = {}
            Do
                Dim reply As PingReply
                reply = pinger.Send(targetIP, timeout, emptyBinary, New PingOptions(timeToLive, True))

                msg = String.Format("{0, 3}", timeToLive)
                timeToLive += 1

                Dim replyAddress As IPAddress = reply.Address
                If reply.Status = IPStatus.Success Then
                    finished = True
                ElseIf reply.Status = IPStatus.TimedOut Then
                    bgw.ReportProgress(0, msg & ": 要求がタイムアウトしました。")
                    Continue Do
                End If
                bgw.ReportProgress(0, msg & ": " & replyAddress.ToString())
            Loop Until finished OrElse timeToLive > maxHops

            If finished Then
                msg = "経路の追跡が完了しました。"
            Else
                msg = String.Format("ホップ数が {0} を超えたため中止しました。", maxHops)
            End If
            bgw.ReportProgress(100, msg)
        End Using
    End Sub
End Class

[ツリー表示へ]
タイトルRe^4: インターネット
記事No8728
投稿日: 2009/02/14(Sat) 08:29
投稿者レオ♪
>信長の質問は結構、重要ですよ。
VBですがグラッフィックス系とか網羅しましたが、通信関係は、さらに上で難しいですね。
コードを試しました。
セキュリティソフトかWindowsのデフェンダーかわかりませんがエラーがでました。
ソケットエラーです。
多分、セキュアソケットレイヤー関連の何かでしょう
っか当てずっぽうですが・・
イキナリ5段飛びのハードル越えは。。アレですね。
基本からボチボチやります。

[ツリー表示へ]
タイトルRe^5: インターネット
記事No8729
投稿日: 2009/02/14(Sat) 08:39
投稿者レオ♪
無理やり走らせました!!
30経路を越えました。^^
っかコレは普通ですか?(滝汗)

[ツリー表示へ]