HOW TO: Проверка соединения с Internet'ом
От: Yehuda  
Дата: 17.05.06 07:30
Оценка:
Как наиболее простым и однозначным способом проверить subj ?..
Re: HOW TO: Проверка соединения с Internet'ом
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.05.06 07:35
Оценка: +1
Здравствуйте, Yehuda, Вы писали:

ping -t yahoo.com
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: HOW TO: Проверка соединения с Internet'ом
От: Yehuda  
Дата: 17.05.06 07:45
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Yehuda, Вы писали:


A>ping -t yahoo.com


Извините за неясно сформулированный вопрос.
Имеется ввиду проверка програмным путем из C#.
Re[3]: HOW TO: Проверка соединения с Internet'ом
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.05.06 07:51
Оценка: :))) :)
Здравствуйте, Yehuda, Вы писали:

Y>Извините за неясно сформулированный вопрос.

Y>Имеется ввиду проверка програмным путем из C#.

Тем не менее, пинг один из самых надёжных способов. Можешь инпортировать функции из ICMP.dll и использовать их.
Всякие проверки наличия соединения с внешним IP (внешними DNS серверами) нестабильны. К тому же нет гарантии что промежуточный роутер не сдох.
Но раз уж C# то конечно надо внести коррективы. microsoft.com из C# пингуется лучше.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: HOW TO: Проверка соединения с Internet'ом
От: anvaka Украина Yasiv
Дата: 17.05.06 07:56
Оценка: 10 (2) +1
Здравствуйте, adontz, Вы писали:

A> Можешь инпортировать функции из ICMP.dll и использовать их.


Уже ?
using System.Net.NetworkInformation;
//...
    Ping pingSender = new Ping();
    PingOptions options = new PingOptions();

    // Use the default Ttl value which is 128,
    // but change the fragmentation behavior.
    options.DontFragment = true;

    // Create a buffer of 32 bytes of data to be transmitted.
    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    byte[] buffer = Encoding.ASCII.GetBytes(data);
    int timeout = 120;
    PingReply reply = pingSender.Send("rsdn.ru", timeout, buffer, options);
    if (reply.Status == IPStatus.Success)
    {
        Console.WriteLine("Address: {0}", reply.Address.ToString());
        Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime);
        Console.WriteLine("Time to live: {0}", reply.Options.Ttl);
        Console.WriteLine("Don't fragment: {0}", reply.Options.DontFragment);
        Console.WriteLine("Buffer size: {0}", reply.Buffer.Length);
    }


A>Но раз уж C# то конечно надо внести коррективы. microsoft.com из C# пингуется лучше.


Re[5]: HOW TO: Проверка соединения с Internet'ом
От: Yehuda  
Дата: 17.05.06 08:45
Оценка:
Здравствуйте, anvaka, Вы писали:

A>Здравствуйте, adontz, Вы писали:


A>> Можешь инпортировать функции из ICMP.dll и использовать их.


A>Уже ?

A>
A>using System.Net.NetworkInformation;
A>//...
A>    Ping pingSender = new Ping();
A>    PingOptions options = new PingOptions();

A>    // Use the default Ttl value which is 128,
A>    // but change the fragmentation behavior.
A>    options.DontFragment = true;

A>    // Create a buffer of 32 bytes of data to be transmitted.
A>    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
A>    byte[] buffer = Encoding.ASCII.GetBytes(data);
A>    int timeout = 120;
A>    PingReply reply = pingSender.Send("rsdn.ru", timeout, buffer, options);
A>    if (reply.Status == IPStatus.Success)
A>    {
A>        Console.WriteLine("Address: {0}", reply.Address.ToString());
A>        Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime);
A>        Console.WriteLine("Time to live: {0}", reply.Options.Ttl);
A>        Console.WriteLine("Don't fragment: {0}", reply.Options.DontFragment);
A>        Console.WriteLine("Buffer size: {0}", reply.Buffer.Length);
A>    }
A>


A>>Но раз уж C# то конечно надо внести коррективы. microsoft.com из C# пингуется лучше.


A>



Красиво...

А в Framework 1.1 как сделать проверку.
Re[5]: HOW TO: Проверка соединения с Internet'ом
От: stump http://stump-workshop.blogspot.com/
Дата: 17.05.06 09:06
Оценка: +1
Здравствуйте, anvaka, Вы писали:

A>Здравствуйте, adontz, Вы писали:


A>> Можешь инпортировать функции из ICMP.dll и использовать их.


A>Уже ?

A>
A>using System.Net.NetworkInformation;
A>//...
A>    Ping pingSender = new Ping();
A>    PingOptions options = new PingOptions();

A>    // Use the default Ttl value which is 128,
A>    // but change the fragmentation behavior.
A>    options.DontFragment = true;

A>    // Create a buffer of 32 bytes of data to be transmitted.
A>    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
A>    byte[] buffer = Encoding.ASCII.GetBytes(data);
A>    int timeout = 120;
A>    PingReply reply = pingSender.Send("rsdn.ru", timeout, buffer, options);
A>    if (reply.Status == IPStatus.Success)
A>    {
A>        Console.WriteLine("Address: {0}", reply.Address.ToString());
A>        Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime);
A>        Console.WriteLine("Time to live: {0}", reply.Options.Ttl);
A>        Console.WriteLine("Don't fragment: {0}", reply.Options.DontFragment);
A>        Console.WriteLine("Buffer size: {0}", reply.Buffer.Length);
A>    }
A>


A>>Но раз уж C# то конечно надо внести коррективы. microsoft.com из C# пингуется лучше.


A>


Пинг может быть перекрыт на прокси.
Понедельник начинается в субботу
Re[6]: HOW TO: Проверка соединения с Internet'ом
От: stele Россия www.stele.su
Дата: 17.05.06 09:25
Оценка:
Здравствуйте, stump, Вы писали:

S>Пинг может быть перекрыт на прокси.


Ну тогда получить данные с www.google.com , если в <title> будет google значит интернет скорее есть, чем нет.
Но тут же можно привести несколько контраргументов в виде доступ к Google закрыт на прокси или сайт валяется в дауне.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 648>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Re[6]: HOW TO: Проверка соединения с Internet'ом
От: akasoft Россия  
Дата: 17.05.06 09:43
Оценка:
Здравствуйте, stump, Вы писали:

S>Пинг может быть перекрыт на прокси.


И не только. Но мы же проверяем некое соединение с неким Интернет для общего случая, подразумевая в конечном итоге сокет (IP-трафик), а не http/ftp трафик.
... << RSDN@Home 1.2.0 alpha rev. 636>> SQLE 2005
Re[6]: HOW TO: Проверка соединения с Internet'ом
От: anvaka Украина Yasiv
Дата: 17.05.06 10:14
Оценка:
Здравствуйте, Yehuda, Вы писали:


A>>> Можешь инпортировать функции из ICMP.dll и использовать их.


Y>А в Framework 1.1 как сделать проверку.


Как уже говорил
Автор: adontz
Дата: 17.05.06
adontz:

Можешь импортировать функции из ICMP.dll и использовать их.


Пример (безо всяких проверок — будьте внимательны):
using System.Net;
using System.Runtime.InteropServices;
//...
public class Pinger
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    private struct ICMP_OPTIONS
    {
        public Byte Ttl;
        public Byte Tos;
        public Byte Flags;
        public Byte OptionsSize;
        public IntPtr OptionsData;
    };

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    private struct ICMP_ECHO_REPLY
    {
        public int Address;
        public int Status;
        public int RoundTripTime;
        public Int16 DataSize;
        public Int16 Reserved;
        public IntPtr DataPtr;
        public ICMP_OPTIONS Options;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 250)]
        public String Data;
    }

    [DllImport("icmp.dll", SetLastError = true)]
    private static extern IntPtr IcmpCreateFile();
    [DllImport("icmp.dll", SetLastError = true)]
    private static extern bool IcmpCloseHandle(IntPtr handle);
    [DllImport("icmp.dll", SetLastError = true)]
    private static extern Int32 IcmpSendEcho(IntPtr icmpHandle, Int32 destinationAddress, String requestData, Int32 requestSize, ref ICMP_OPTIONS requestOptions, ref ICMP_ECHO_REPLY replyBuffer, Int32 replySize, Int32 timeout);

    public bool Ping(IPAddress IP)
    {
        IntPtr ICMPHandle;
        Int32 iIP;
        String sData;
        ICMP_OPTIONS oICMPOptions = new ICMP_OPTIONS();
        ICMP_ECHO_REPLY ICMPReply = new ICMP_ECHO_REPLY();
        Int32 iReplies;

        ICMPHandle = IcmpCreateFile();
        iIP = BitConverter.ToInt32(IP.GetAddressBytes(), 0);
        sData = "x";
        oICMPOptions.Ttl = 255;

        iReplies = IcmpSendEcho(ICMPHandle, iIP,
            sData, sData.Length, ref oICMPOptions, ref ICMPReply,
            Marshal.SizeOf(ICMPReply), 30);

        IcmpCloseHandle(ICMPHandle);
        if (ICMPReply.Status == 0)
            return true;
        return false;
    }
}
Re[2]: HOW TO: Проверка соединения с Internet'ом
От: TK Лес кывт.рф
Дата: 17.05.06 11:31
Оценка:
Hello, "adontz"
>
> ping -t yahoo.com

А почему, не microsoft.com?
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: HOW TO: Проверка соединения с Internet'ом
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.05.06 11:33
Оценка: :)
Здравствуйте, TK, Вы писали:

>> ping -t yahoo.com

TK>А почему, не microsoft.com?

Я потом поправился
Автор: adontz
Дата: 17.05.06
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: HOW TO: Проверка соединения с Internet'ом
От: TK Лес кывт.рф
Дата: 17.05.06 11:38
Оценка: +2
Hello, "adontz"
>
> Но раз уж C# то конечно надо внести коррективы. microsoft.com из C#
> пингуется лучше.

Да, в случае с microsoft, проще сразу return false написать.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: HOW TO: Проверка соединения с Internet'ом
От: Arboz Россия  
Дата: 17.05.06 11:49
Оценка: 4 (1)
Здравствуйте, Yehuda, Вы писали:

Y>Как наиболее простым и однозначным способом проверить subj ?..


Полный ответ возможно будет найден здесь
Автор: merlinJap
Дата: 29.05.04
.

Или (если утрировать ) так


        public class InternetState
    {

        [DllImport("wininet.dll")]
        extern static bool InternetGetConnectedState(out int Description, int ReservedValue) ;
        
        public static bool IsConnected
        {
            get
            {
                int Desc ;
                return InternetGetConnectedState(out Desc, 0 ) ;
            }
        }
    }


П.С. Некомпилируемый оригинал здесь
Re[2]: HOW TO: Проверка соединения с Internet'ом
От: Yehuda  
Дата: 18.05.06 11:21
Оценка:
Здравствуйте, Arboz, Вы писали:

Спасибо всем большое.
Re[2]: HOW TO: Проверка соединения с Internet'ом
От: dase  
Дата: 20.09.07 06:43
Оценка:
Здравствуйте, Arboz, Вы писали:

A>Здравствуйте, Yehuda, Вы писали:


Y>>Как наиболее простым и однозначным способом проверить subj ?..


A>Полный ответ возможно будет найден здесь
Автор: merlinJap
Дата: 29.05.04
.


A>Или (если утрировать ) так



A>
A>        public class InternetState
A>    {

A>        [DllImport("wininet.dll")]
A>        extern static bool InternetGetConnectedState(out int Description, int ReservedValue) ;
        
A>        public static bool IsConnected
A>        {
A>            get
A>            {
A>                int Desc ;
A>                return InternetGetConnectedState(out Desc, 0 ) ;
A>            }
A>        }
A>    }
A>


A>П.С. Некомпилируемый оригинал здесь


Красавчик! От души написал! Все работает, спасибо!
Re[2]: HOW TO: Проверка соединения с Internet'ом
От: GavrishDV  
Дата: 20.09.07 06:59
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Yehuda, Вы писали:


A>ping -t yahoo.com


Прошу прощения за беспокойство, но не смущает ли вас тот факт, что при подключении через проксю пинги не ходят(причем ингда и с паролем), а инет есть...

Может всетаки нуна у юзера переспрашивать...
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[3]: HOW TO: Проверка соединения с Internet'ом
От: Andir Россия
Дата: 20.09.07 11:55
Оценка:
Здравствуйте, GavrishDV, Вы писали:

GDV>Прошу прощения за беспокойство, но не смущает ли вас тот факт, что при подключении через проксю пинги не ходят(причем ингда и с паролем), а инет есть...

GDV>Может всетаки нуна у юзера переспрашивать...

Ага, типа
bool IsInternetAlive()
{
    return DialogResult.Yes == 
        MessageBox.Show(
            "Эй, слушай проверь, есть ли соединение с Internet??? Очень надо!",
            "Быть или не быть?",
            MessageBoxButtons.YesNo    
            );
}



С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 743 ) { /* Работаем */ }
Re[4]: HOW TO: Проверка соединения с Internet'ом
От: GavrishDV  
Дата: 20.09.07 13:14
Оценка:
Здравствуйте, Andir, Вы писали:

A>Здравствуйте, GavrishDV, Вы писали:


GDV>>Прошу прощения за беспокойство, но не смущает ли вас тот факт, что при подключении через проксю пинги не ходят(причем ингда и с паролем), а инет есть...

GDV>>Может всетаки нуна у юзера переспрашивать...

A>Ага, типа

A>
A>bool IsInternetAlive()
A>{
A>    return DialogResult.Yes == 
A>        MessageBox.Show(
A>            "Эй, слушай проверь, есть ли соединение с Internet??? Очень надо!",
A>            "Быть или не быть?",
A>            MessageBoxButtons.YesNo    
A>            );
A>}
A>

A>-)

A>С Уважением, Andir!


Нет типа введи адрес прокси, тип, имя юзера, пароль...
А потом еще гемор если аутентификация виндовая...
Или просто взять настройки експлорера, если им ктото пользуется...
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[5]: HOW TO: Проверка соединения с Internet'ом
От: Andir Россия
Дата: 20.09.07 21:33
Оценка:
Здравствуйте, GavrishDV, Вы писали:

GDV>Нет типа введи адрес прокси, тип, имя юзера, пароль...

GDV>А потом еще гемор если аутентификация виндовая...
GDV>Или просто взять настройки експлорера, если им ктото пользуется...

А как это может помочь в определении, доступен ли интернет? Ну выдали тебе адрес прокси, а пинги как не ходили, так и не ходят. И google.com тоже закрыт на проксе.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 743 ) { /* Работаем */ }
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.