Blog (2)
Komentarze (1)
Recenzje (0)

WinPCAP | Część pierwsza - Podstawy

@SysOpWinPCAP | Część pierwsza - Podstawy17.02.2013 22:47

Siłą rzeczy musiało to nadejść, od dawna przymierzałem się do pisania bloga. Czemu? Od pewnego czasu zauważyłem u siebie spadek motywacji do uczenia się kolejnych języków programowania i bibliotek (wypalenie?). Ubzdurałem sobie, że jeśli zmuszę się do pisania kursów to siłą rzeczy będę musiał uczyć się, aby nie wprowadzić czytelnika w błąd. Argument jest paradoksalny, ale skoro to czytasz to spełnił swoje założenie. Dosyć tego gadania! Bierzemy się do nauki.

Co będziesz potrzebował: [list] [item]Znajomość języka C lub C++, a najlepiej obu.[/item][item]Kompilatora gcc, preprocesora i linkera, czyli pakiet MinGW + konsola.[/item][item]Podstawowej wiedzy na temat sieci, ale zawsze możesz się douczyć na Wikipedii.[/item][item]Minimalnej znajomość języka Angielskiego..[/item][item]Windows.[/item][item]Zainstalowany pakiet WinPCAP. [/item][item] Paczka dla developerów. [/item][/list]

Oczywiście jeśli kursy będą kontynuowane to nauczymy się czegoś nieco ciekawszego: ARP Spoofing na lokalu + wysyłka do twojej bazy MySQL w piwnicy.

WinPCAP to skrót od: Windows Packet Capture. Biblioteka umożliwia niskopoziomową zabawę z pakietami w przeciwieństwie do WinSocka. Możemy łapać każdy pakiet przychodzący jak i wychodzący od naszego urządzenia sieciowego, analizować zawierane w sobie dane, jak i wysyłać surowe pakiety. Programy pisane pod WinPcapa w dużej mierze to wszelkiej maści sniffery i analizatory.

Zacznij od zainstalowania WinPcapa, czyli odpal exe i wciskaj dalej, .. i dalej. Jak już to zrobisz to wejdź do katalogu MinGW i przenieś zawartość paczki WinPcapa dla developerów. Czyli zawartość Lib do lib, zawartość include do include. Następnie zrób sobie miejsce na projekty. W moim przypadku to: D:\Works\C\WinPcap\ Możesz się jeszcze pokusić o zrobienie podfolderów, na przykład: 001-Basics. Utwórz teraz plik z rozszerzeniem .c i odpal go notatnikiem, albo czymkolwiek innym.

Kod źródłowy częściowo tłumaczę w komentarzach, na razie postaraj się go przepisać.


/* Kod źródłowy jest wykonany 
 * przez zespół tworzący dokumentację
 * WinPCAP z niewielkimi modyfikacjami od SysOp
 * Pierowtne źródło: http://www.winpcap.org/docs/docs_40_2/html/group__wpcap__tut1.html */

#define HAVE_REMOTE
/* Musimy to zdefiniować, inaczej nie będziemy
 * mogli korzystać z pewnych „ułatwień” i funkcji */

#include <pcap.h>
#include <stdio.h>

int main()
{
	pcap_if_t* Devices = NULL;	

	char ErrorHandler[PCAP_ERRBUF_SIZE] = "";
	
	if (-1 == pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &Devices, ErrorHandler))
	{	 
		fprintf(stderr, "pcap_findalldevs_ex error: %s", ErrorHandler);
		return -1;
	}
	
	int Counter = 1;
	
	do
	{
		/* Wykonujemy pętle dopóki Devices->next zawiera wartość nie zerową 
		 * Prościej: wypisujemy wszystkie urządzenia dostępne lokalnie */
		printf("%i#: \n", Counter);
		printf(" %s: \n", Devices->name);
		printf(" %s: \n", Devices->description);
		Counter++;
	}
	while (NULL != (Devices = Devices->next));
	
	pcap_freealldevs(Devices);
	/* Dealokujemy pamięć zawartą w Devices, zerujemy wskaźniki */
	
	return 0;
}

[Linia 15]Buffer, do którego wpisywany jest błąd, zazwyczaj jest bardzo dobrze opisany. Komunikat o błędzie potrafi zwrócić większość funkcji. PCAP_ERRBUF_SIZE wynosi 256 bajtów.

[Linia 17] pcap_findalldevs_ex służy do wczytania listy wsystkich urządzeń wraz z ich nazwą, opisem etc Prototyp:

 int pcap_findalldevs_ex(char *source,
			     struct pcap_rmtauth *auth,
			     pcap_if_t **alldevs,
			     char *errbuf);

Pierwszy argument precyzuje skąd pobrać listę urządzeń. Pod tą małomówną nazwą kryje się następujący ciąg znaków: "rpcap://" oznacza: remote packet capture. Zapytasz: Jak remote, skoro chce pobrać informację o moich urządzeniach? Domyślnie, jeśli nic nie wpiszemy po '//' niejawnie jest tam podawane "localhost", czyli to otwiera nam furtkę do podawania dowolnego ip rpcap://host:port[/]i W drugim argumencie podajemy wskaźnik na strukturę, która opisuje dane logowania (login, hasło) oraz typ uwierzytelnienia. Ty nie logujesz się na zdalne urządzenie, więc dajesz NULL. Kolejny argument to wskaźnik na strukturę pcap_if_t, która będzie przechowywać informację o urządzeniach. No i ostatni: buffer na komunikat o błędzie. Funkcja zwraca -1 w przypadku błędu. Sam błąd najczęściej spowodowany jest brakiem sprecyzowania źródła, czyli tego pierwszego argumentu.

Powyższy program kompilujemy poleceniem: gcc wejscie.c -o wyjscie.exe -l wpcap

Co ciekawe, WinPcap automatycznie linkuje też WinSocka. Jeśli masz jakieś błędy, to poinformuj mnie w komentarzach, postaram się je rozwiązać. Jednak przed napisaniem sprawdź czy przerzuciłeś zawartość lib i include z paczki dla developerów do folderów lib i include w MinGW i zainstalowałeś WinPcap.

To na razie tyle jeśli chodzi o podstawy. Mam nadzieje, że ktoś z tego skorzysta. W następnej części zajmiemy się łapaniem pakietów i wyświetlaniem ich zawartości w postaci surowej. Serwus!

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.