2017-08-28 81 views
8

Do celów edukacyjnych implementuję protokół TCP (na razie tylko RFC 793), ale nie mam pomysłu, aby go przetestować. Większość rzeczy TUN/TAP w Internecie jest nieaktualnych (np. wywołania Linuksa API już nie działają) i po prostu nie wyjaśnia wystarczająco. Ponadto, I czuję się jak tworzenie urządzenia i przekazywanie paczek itp. Nie są najlepszym sposobem na uczenie się. Na przykład, tylko bym raczej przesłonić socket(), listen(), connect(), accept(), send(), recv() itd. W programie raczej niż spedycja cały ruch ethernet na urządzenie/program, który robi bookeeping dla całego systemu, a niż dla pojedynczego programu.Jak przetestować niestandardową implementację protokołu TCP w systemie Linux?

Zastanawiam się, czy to jest możliwe. Jeśli nie, chciałbym poznać najprostszy sposób, aby przetestować implementację TCP w systemie Linux.

Ponieważ śledzę RFC 793, byłoby świetnie, gdybym mógł mieć IP w mojej aplikacji IP (Internet Protocol jak wspomniano w RFC). Czy to jest możliwe, czy też nie muszę się martwić o rzeczy TUN/TAP?

Dzięki ..

+0

Staram się lepiej zrozumieć swoje pytanie. Czy masz stos TCP, który zaimplementowałeś i chcesz go przetestować? Istnieją co najmniej dwa sposoby, możesz przetestować swój stos TCP jako serwer, a następnie podłączyć dowolnego "standardowego" klienta (np. Telnet do niego). Pewne ciężkie podnoszenie, które musisz zrobić, to - być w stanie zaimplementować nasłuchiwanie i zaakceptować podobną funkcjonalność na stosie TCP - ale to byłby punkt wyjścia - Załóżmy - dostajesz wejściowe datagramy IP.Innym sposobem jest najpierw przetestowanie go jako klienta. – gabhijit

Odpowiedz

0

Wszystko, co potrzebne jest do przechwycenia wszystkich pakietów TCP z bitami (SYN, ACK, FIN, itd.) Aplikacja wysłał i zobaczyć czy wszystko działa poprawnie:

enter image description here

Można to zrobić za pomocą wireshark lub innego sniffera. Podczas testowania zobaczysz wszystkie pakiety tcp z wysłanymi bitami.

enter image description here

Aby chcesz zobaczyć połączenia systemu Linux, która aplikacja jest powołanie, można użyć GDB debugger lub jakąkolwiek inną.

1

Można spróbować utworzenie dwóch rówieśników , jeden używający gniazda RAW, a drugi gniazda TCP.

Jeśli mogą się komunikować, a pakiety są rzeczywiście dostarczane/odzyskiwane w taki sam sposób, jak robi to TCP, wiesz, że twoja niestandardowa implementacja zakończyła się powodzeniem.

C sockets

C RAW sockets

C TCP implementation