Dzisiaj pokażę wam jak zrobić program który będzie pingował wybrane adresy IP lub ich przedział. Pingowanie to prosty sposób diagnozowania połączeń sieciowych. Pozwala na sprawdzenie czy istnieje połączenie pomiędzy hostami testującym i testowanym. Polega na wysyłaniu pakietów i ich odbiorze. W kilku słowach, program sprawdzi które adresy IP są w danym momencie zajęte a które są wolne. To do roboty. Zaczynamy standardowo od utworzenia nowego projektu. I od rozłożenia elementów tak jak to jest przedstawione na obrazku:
Dla ListBoxów ustawiłem Odpowiedni BackColor. Zielony dla numerów aktywnych, czerwony dla nieaktywnych. Najpierw musimy ograniczyć naszego użytkownika. Adres IP składa się z czterech rzędów cyfr od 0 – 255 tak więc nasz użytkownik nie może w TextBoxy wpisać liter ani cyfr większych niż 255, nie może też zostawić pustych pól i może używać tylko liczb całkowitych. Spowodowało by to wystąpieniem błędu, w najgorszym razie zapętlenie które mogłoby zawiesić komputer.
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 |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If Not (IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) And IsNumeric(TextBox3.Text) _ And IsNumeric(TextBox4.Text) And IsNumeric(TextBox5.Text)) Then MsgBox("Aby program działał dobrze wszystkie pola muszą zawierać cyfry z przedziału od 0-255. Nie spełniłeś wymagań.") Else If TextBox1.Text <= 255 And TextBox1.Text >= 0 And TextBox2.Text <= 255 And TextBox2.Text >= 0 And _ TextBox3.Text <= 255 And TextBox3.Text >= 0 And TextBox4.Text <= 255 And TextBox4.Text >= 0 And _ TextBox5.Text <= 255 And TextBox5.Text >= 0 Then Dim output As Integer If Integer.TryParse(TextBox1.Text, output) And Integer.TryParse(TextBox2.Text, output) And _ Integer.TryParse(TextBox3.Text, output) And Integer.TryParse(TextBox4.Text, output) And _ Integer.TryParse(TextBox5.Text, output) Then MsgBox("udało sie") Else MsgBox("Proszę podać tylko liczby całkowite.") End If Else MsgBox("któreś z pól zawiera wartość większą niż 255.") End If End If End Sub |
Dobra co tutaj się dzieje. Najpierw sprawdzamy czy w naszych TextBoxach znajdują się cyfry. Funkcja „isNumeric” sprawdza czy tekst jest numerem jeśli tak przechodzi dalej, jeśli nie wyskakuje komunikat, dalej sprawdzamy czy cyfry są z dobrego przedziału czyli nie może być mniejszy niż 0 ale nie może być większy od 255. Na końcu sprawdza czy numer jest Integer czyli czy pasuje do wzorca liczb całkowitych. Można odpalić teraz program i sprawdzić czy wszystko działa. U mnie działało super. Teraz zadeklarujemy sobie dwie zmienne „start” i „stop” Będą one naszym początkiem i końcem adresów ip a także minimum i maximum naszego prograssBara. Dodamy jeszcze linijkę ustawiającą nasz ProgressBar na minimum aby za każdym razem gdy przyciśniemy „diagnoza” a nasz program wcześniej popełnił jakiś błąd (bo i tak może się zdarzyć) progressBar będzie zawsze zerowany, Użyjemy też opcji Clear na ListBoxach aby każde wyszukiwanie było nowe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Public Class Form1 Dim start As String Dim koniec As String Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click start = TextBox4.Text koniec = TextBox5.Text ProgressBar1.Minimum = start ProgressBar1.Maximum = koniec + 1 ProgressBar1.Value = ProgressBar1.Minimum ListBox1.Items.Clear() ListBox2.Items.Clear() ..... ..... |
Możemy sprawdzić czy nie ma błędów, raczej nasz program nic jeszcze nie zrobi ale sprawdzić warto. Dodamy sobie teraz jeszcze trzy zmienne. „numer” , „aktywne” , „nieaktywne”. Numer będzie przechowywał nasz numer ip połączony w całość, reszta zmiennych będzie informowała użytkownika o tym ile program znalazł aktywnych numerów a ile nieaktywnych.
1 2 3 4 5 6 7 |
Public Class Form1 Dim start As String Dim koniec As String Dim numer As String Dim aktywne As Integer Dim nieaktywne As Integer ..... |
Przechodzimy teraz do miejsca gdzie nasza pętla uruchamiała komunikat „MsgBox(„udało sie”)” kasujemy to i wprowadzamy pętle „do while”. Wygląda to tak:
1 2 3 4 5 6 7 8 9 10 11 |
If Integer.TryParse(TextBox1.Text, output) And Integer.TryParse(TextBox2.Text, output) And _ Integer.TryParse(TextBox3.Text, output) And Integer.TryParse(TextBox4.Text, output) And _ Integer.TryParse(TextBox5.Text, output) Then Do Loop Until start = koniec + 1 Else .... .... |
Pętla Do będzie sprawdzała nam nasze adresy ip. Trzeba pamiętać, że taki typ pętli jaki ja użyłem leci od góry do dołu, czyli warunek jest sprawdzany na końcu dla tego trzeba do koniec dodać 1. teraz łączymy nasz numer w całość. Dodamy sobie na chwile linijke „ListBox1.Items.Add(numer)” aby sprawdzić czy wszystko działa. Wygląda to tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
.... If Integer.TryParse(TextBox1.Text, output) And Integer.TryParse(TextBox2.Text, output) And _ Integer.TryParse(TextBox3.Text, output) And Integer.TryParse(TextBox4.Text, output) And _ Integer.TryParse(TextBox5.Text, output) Then Do numer = "" + TextBox1.Text + "." + TextBox3.Text + "." + TextBox4.Text + _ "." + start.ToString ListBox1.Items.Add(numer) start += 1 ProgressBar1.Value += 1 Loop Until start = koniec + 1 ...... |
Powinno wam ładnie listować, mi listuje. Teraz kończymy nasz program dodając funkcje „My.Computer.Network.Ping(numer)” w taki sposób:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Do numer = "" + TextBox1.Text + "." + TextBox3.Text + "." + TextBox4.Text + "." + start.ToString If My.Computer.Network.Ping(numer) Then ListBox1.Items.Add(numer) aktywne += 1 Else ListBox2.Items.Add(numer) nieaktywne += 1 End If If ProgressBar1.Value = koniec Then MsgBox("Operacja ukończona pomyślnie. Znaleziono " + aktywne.ToString + " aktywnych numerów IP i "_ + nieaktywne.ToString + " numerów nieaktywnych") End If start += 1 ProgressBar1.Value += 1 Loop Until start = koniec + 1 |
Na samym końcu tuż powyżej „sub” dodajemy linijkę:
1 2 3 4 |
..... ProgressBar1.Value = ProgressBar1.Minimum End Sub |
Cały kod można pobrać: ping_program
cały projekt: Program_pingujacy.rar
jak to działa zobaczycie tutaj: