Router w C#

0

Cześć
Chcę napisać router w C#, lecz kompletnie, ale to kompletnie nie mam pojęcia jak się do tego zabrać, dlatego proszę o jakieś wskazówki jak podejść do tematu. Nie chodzi mi tu o gotowe rozwiązania bo to jest zbyt szerokie zagadnienie. Głównie bym was prosił o podanie zagadnień, kierunków, w których mam się poruszać. Fajnie by było jak by ktoś mi podpowiedział jak dobrać się do karty sieciowej, jak przechwycić pakiety itp.

0

Jak chcesz napisać warstwę sprzętową?
Chyba, że masz na myśli soft do rutera jakiejś firmy

0

Mam na myśli soft na PC. Wkładam do PCta kilka kart sieciowych i na nich routuje. Tylko zostaje mały szczegół żeby napisać program co będzie mi to robił :)

0

Najpierw poczytaj moze o tym jak odbywa sie samo rutowanie, skoro nie wiesz jak sie zabrac. Hasla przydatne w temacie - protokoly routingu (np. RIP, RIP2, chociaz mozna tez poszalec z OSPF :) ), warstwy modelu ISO/OSI. Jesli chcesz miec bezposredni dostep do sieciowki tak, by filtrowac pakiety to musisz a) napisac sterownik b) wykorzystac np. biblioteke WinPcap.

0

Protokoły routingu znam w miarę dobrze, a jak czegoś nie wiem to zawsze są RFC. Z tym nie będzie problemu. Problemem jest to, że nie programowałem nigdy w C# i go nie znam. Poczytałem trochę na temat, ale C# znam od strony teoretycznej i to <ort>na razie </ort>pobieżnie (składnia języka).

Może jednak lepiej będzie jak postawie konkretne problemy:

  1. Na początek chciałbym pobrać kilka segmentów TCP i rozdzielić je na nagłówki i pakiety IP i wykonać podobną operacje już z samym pakietem IP. Po pobraniu sprawdzić sumy kontrolne. Czy w C# istnieją metody, które zrobią to za mnie, czy muszę rozdrabniać się do bitów i sam stworzyć metodę do składania bitów na pakiety i segmenty. Jeśli istnieją takie metody napiszcie mi coś o nich.

  2. Jak pobieram dane to też wypadało by też coś odesłać. Jak wysłać w sieć wygenerowany segment TCP?

0

W ta strone to sie nie zaglebialem, ale mozesz zajrzec do przestrzeni System.Net albo System.Net.Sockets ale to chyba za plytko jak dla Ciebie. Wydaje mi sie, ze WinPcap jest lepszym wyjsciem.

0

A mogę tak głupio spytać, czy nie lepiej skorzystać z gotowych rozwiązań?
No, chyba, że to wszystko tak tylko dla sportu.

0

Bardziej dla sportu. Najlepiej uczyć się przez przykłady i powstałe w tym momencie problemy. Chwilowo jednak zarzucam projekt router. Muszę co nieco jeszcze poczytać o podstawach c# żeby brać się za ten problem.

A tak na marginesie to jak przypisać liczbę ósemkową do zmiennej. Przy liczbach szesnastkowych język zachowuje się według moich oczekiwać, ale przy ósemkowych niestety nie. Jak robię tak:

int zm = 011; (chcę zapisać ósemkową wartość 11)

to do zmiennej przypisuje mi 11 dziesiętnie, a przykładowo w c++ w zm było zapisane 9 dziesiętnie czyli 11 ósemkowo.

0

O ile z szesnastkowymi nie ma problemu, to ósemkową można np. tak:
int zm = Convert.ToInt32("11", 8);

0

Dzięki za podpowiedź.

Mam następny kłopot. Chodzi o bitowe kodowanie liczb ujemnych przez .NET. Czy net koduje ujemne wartości w U2, czy w innym systemie. Najlepiej jak pokażę na przykładzie z założeniem, że jest to U2.

  1. zapisuję taką wartość do zmiennej -2147483648 czyli bitowo 11111111 11111111 11111111 11111111(U2)
  2. wykonuję na zmiennej następującą czynność zmienna << 1; czyli zmienna ma teraz wartość
    11111111 11111111 11111111 11111110, co w U2 jest równe -2 dziesiętnie.
    Niestety jak wykonam następujące polecenie Console.WriteLine("{0}",zmienna); to program wypisuje mi 0 a nie -2. Czego tak się dzieje?

</i>

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0