samerselo Ответов: 1

Как пинговать сайт из моего кода


Я делаю небольшую программу для тестирования сетевого подключения
Вся моя работа в порядке но единственная проблема с которой я сталкиваюсь это код
Res = My.Computer.Network.Ping(txtComputerName.Text).ToString

он нормально работает в моей локальной сети и дает мне хорошие результаты
но когда я пытаюсь пропинговать веб-сайт, он выдает мне ошибку

обратите внимание, что я могу получить доступ к интернету через ISA server 2006 и не могу подключить свой компьютер непосредственно к маршрутизатору

Что я уже пробовал:

Это и есть вся функция
<pre>     Try
            Dim Res As Boolean

            lblError.Text = String.Empty
            StopPing = False
            Me.PictureBox1.Image = ImageList1.Images(0)
            Me.lblElpased.ForeColor = Color.MidnightBlue

            Dim i As Short = 0
            Do
                Application.DoEvents()
                If StopPing Then Exit Do
                Threading.Thread.Sleep(300)
                Me.PictureBox1.Image = ImageList1.Images(0)
                Me.Refresh()
                Threading.Thread.Sleep(200)
                Application.DoEvents()
                Mtim = Stopwatch.StartNew
                Res = My.Computer.Network.Ping(txtComputerName.Text).ToString
                Mtim.Stop()
                Me.lblElpased.Text = "Time: " & Mtim.ElapsedMilliseconds & " ms"

                Dim hostInfo As IPHostEntry = Dns.GetHostEntry(txtComputerName.Text)
                Me.lblError.Text = hostInfo.HostName & vbCrLf

                If Res Then
                    Me.PictureBox1.Image = ImageList1.Images(1)
                    Me.lblElpased.ForeColor = Color.DarkGreen

                    Dim index As Integer
                    For index = 0 To hostInfo.AddressList.Length - 1
                        Me.lblError.Text &= hostInfo.AddressList(index).ToString & vbCrLf

                    Next
                Else
                    Me.PictureBox1.Image = ImageList1.Images(2)
                    Me.lblElpased.ForeColor = Color.DarkRed

                    Dim index As Integer
                    For index = 0 To hostInfo.AddressList.Length - 1
                        Me.lblError.Text &= hostInfo.AddressList(index).ToString & vbCrLf

                    Next
                End If
                i += 1
            Loop Until ((i >= NuPings.Value) And (chkKeepPing.Checked = False))
        Catch ex As Exception
            lblError.Text = ex.Message
        End Try

Richard MacCutchan

"Т дает мне ошибку"
Тогда вам нужно выяснить, почему это дает вам ошибку.

samerselo

причина ошибки заключается в следующем

У меня есть ISA server, который предоставляет интернет в сеть, что означает, что для подключения к интернету мне нужно (прокси + учетные данные) правильно передать команду ping, чтобы она была выполнена правильно, вот что я не смог сделать

Dave Kreskowiak

Какое имя ты пытаешься пинговать? Многие сайты больше не реагируют на пинги.

1 Ответов

Рейтинг:
0

Jochen Arndt

Цитата:
обратите внимание, что я могу получить доступ к интернету через ISA server 2006 и не могу подключить свой компьютер непосредственно к маршрутизатору
В таких случаях вы можете использовать только те протоколы, которые разрешены (переадресованы) сервером. Для ping это требует, чтобы исходящие ICMP-пакеты и соответствующие ответы не фильтровались. Вы можете спросить об этом администратора ISA server.

Вы не можете пинговать веб-сайт. Параметр для Ping() функция должна быть IP-адресом, URL-адресом типа www.example.com, или имя компьютера системы в вашей локальной сети.

Смотреть также Сеть.Метод Ping (Microsoft.VisualBasic.Devices) | Майкрософт Документы[^]:
Цитата:
Метод Ping не является безотказным методом определения доступности удаленного компьютера: порт ping на целевом компьютере может быть отключен или запрос ping может быть заблокирован брандмауэром или маршрутизатором.

Адрес, передаваемый методу Ping, должен быть разрешимым DNS и не может предшествовать "http://".
Это означает, что вы можете не получить никакого ответа, даже если пакеты ICMP ping не фильтруются ISA-сервером.

Цитата:
Я делаю небольшую программу для тестирования сетевого подключения
В зависимости от того, что вы подразумеваете под "сетевым подключением", это может быть сделано другими методами:

Проверьте состояние сетевого интерфейса вашей системы (Сетевом интерфейсе.Собственность OperationalStatus (Системы.Нет.Сведений О Сети) | Майкрософт Документы[^]).

Выполните разрешение имен с помощью Метод Dns.GetHostEntry (System.Net) | Microsoft Docs[^] с действительным именем. Это позволит проверить подключение к одному из DNS-преобразователей, настроенных для вашего сетевого интерфейса. Это может быть либо ISA-сервер, маршрутизатор, либо DNS-сервер в сети, и он сообщает вам об этом, если имеется подключение к этой системе.

Для подключения к интернету (что было бы проблемой ISA-сервера или маршрутизатора, если бы он был недоступен) попробуйте подключиться к службе, такой как HTTP известного сервера, который не заблокирован ISA-сервером.

[РЕДАКТИРОВАТЬ]
Существует также функция Windows API, возвращающая состояние соединения: INetworkListManager::GetConnectivity | Microsoft Docs[^]

К сожалению, похоже, что нет .Чистый эквивалент. Но в интернете должны быть приведены примеры того, как его вызвать .Чистый как Как использовать Windows NLM API для получения уведомлений о новых сетевых подключениях[^].
[/РЕДАКТИРОВАТЬ]


samerselo

спасибо
это очень много расширит

цель моей программы состоит в двух вещах
1 - это знать, включен ли компьютер, и я могу получить доступ к нему через локальную сеть
2 - это проверить, есть ли у моего локального компьютера доступ в интернет или нет

Я успешно достиг номера 1, но потерпел неудачу на номере 2

samerselo

Примечание: как команда ping командной строки выполняет две цели одновременно

Jochen Arndt

Смотрите мой обновленный ответ.
Использование ping-наименее надежный метод, даже если он не фильтруется.

samerselo

интересно я изучу это может быть найду что нибудь полезное

samerselo

Но это не помогло

функция дать верный результат-машина подключена к интернету? даже когда я использую учетную запись, которая не имеет доступа к интернету

Jochen Arndt

Это правильный ответ:
Сама система имеет доступ в интернет.

Но из - за вашей специфической настройки доступ к некоторым сервисам - например, HTTP[s] - ограничен с помощью шлюза / прокси, который - опять же в вашем случае, как я понимаю, - требует авторизации.

Так что ваш вопрос, вероятно, таков
"Как проверить, разрешен ли текущий пользователь доступ в интернет"?

На этот вопрос можно ответить только тогда, когда вы знаете, какие ограничения установлены для авторизованных пользователей и для других и как осуществляется авторизация. Это означает, что вы должны найти протокол и сервер, который разрешен для авторизованных пользователей и запрещен для других. Человек, который может помочь в этом, является администратором ISA server.