Pokaż wyniki 1 do 8 z 8

Temat: fragmentacja

  1. #1
    h3x
    h3x jest offline Banned
    Zarejestrowany
    Dec 2007
    Postów
    271

    Domyślnie fragmentacja

    jak to jest z ta fragmentacja?
    zalozmy ze wysylam na raz ramke ip o wielkosci 1024 bajtow.
    Czy moga dane dojsc w kilku pakietach ip, czy musi pozostac 1?
    A jesli wysle wiecej, np 100 kb? To tez leci jako calosc?

    I jak wykonam recvfrom() to jaka mam gwarancje ze chociaz naglowek zostanie odebrany? No moge sprawdzac ile odebralem, ale wolalbym miec jakies info nt fragmentacji.

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Fragmentacja jest obslugiwana przez stos TCP/IP systemu operacyjnego a nie przez aplikacje sama w sobie bo nie kazdy programista musi sie znac na TCP/IP - jest programista a nie inzynierem od sieci

    W prostym wariancie system robi wszystko za Ciebie dopuki nie powiesz mu ze chcesz inaczej. Fragmentacja to ciekawa sprawa - mozna podzielic nawet maly pakiet (wymusic fragmentacje) i zobaczyc co sie stanie :-) a dzieja sie rooozne rzeczy hihihi.

    Jesli pakiet jest wiekszy niz MTU to automatycznie jest dzielony na czesci. Niektore systemy/firewall'e ustawiaja flage DF (don't fragment) ktora mowi tylko tyle aby przeslac pakiet bez fragmentacji (pozostaje tylko problem zbyt malego MTU na niektorych laczach) - przyznam ze nie pamietam jak sie wtedy zachowuja systemy po drodze - logika wskazywalaby ze dotycyz to tylko dobrowolnego fragmentowania gdy np dzielimy pakiet na kawalki po 128 bajtow a MTU na ethernecie jest powiedzmy 1500 (http://www.juniper.net/techpubs/soft...l-config5.html - pierwszy link z google). Na koniec dodam ze niektore firewall'e nie puszczaja fragmentow - wymagaja ze aby przeslac pakiet dalej do sieci LAN wewnatrz organizacji (czy to w wyniku polaczenia przez NAT ktory robi firewall czy tez do DMZ) pakiet musi zostac zdefragmentowany na firewall'u.

    Z fragmentacja wiaze sie jeden problem z IDS'ami - rozne systemy operacyjne roznie traktuja i obsluguja fragmentacje. Jesli system docelowy to windows a IDS chodzi na Linuxie to moze byc tak ze Linux powie OK a windows posklada pakiet po swojemu i bedzie mial on inna zawartosc albo kontekst i beda fajerwerki. Dlatego do serwerow zaleca sie HIDS (Host based IDS) bo tylko on tak na prawde widzi pakiet tak jak to widzi potencjalna ofiara.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    h3x
    h3x jest offline Banned
    Zarejestrowany
    Dec 2007
    Postów
    271

    Domyślnie

    a czy mozliwy jest taki bajer, ze pakiet od isp do mnie trafi z rozwalonym naglowkiem? zalozmy ze nie ma zadnych uzadzen procz kabla, a ostatni router zechcial sobie go podzielic bo pamieci mu braklo. A ze zrobil to na kawalki po 10 bajtow...

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Musi byc zachowany poprawny naglowek albo pakiet zostanie cichutko upuszczony na podloge Pomysl o fragmentacji jak o dzieleniu payloadu pakietu, naglowek zostaw w spokoju.

    BTW. Skladanie pakietow moze powodowac wiele problemow w niektorych okolicznosciach
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    h3x
    h3x jest offline Banned
    Zarejestrowany
    Dec 2007
    Postów
    271

    Domyślnie

    jeszcze 1 pytanie, czy recv/recvfrom zapisuje caly pakiet? (o ile bufor nie bedzie mniejszy) I czy dobrym pomyslem jest sprawdzic mtu, i zaalokowac wlasnie taka pamiec? i czy send/sendto tez mozna wysylac buforem = mtu? i czy mtu moze byc jakas mala liczna, np 10? czy jest jakies minimum?

    Duzo trzeba wiedziec zeby nie popelnic bledu
    Ostatnio edytowane przez h3x : 03-14-2008 - 17:39

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Nie sprawdzalem wiec napisze jak moim zdaniem (na logike) to dziala. Prosilbym aby ktos kto zna C/C++ w lepszym niz ja stopniu sie wypowiedzial w sprawie allokacji bufora - zwyczajnie Perl ktory jest moim ulubionym narzedziem robi bardzo duzo za mnie w tej kategorii

    Nie wiem czy jestes w stanie dostac sie do systemu tak aby skladac pakiety samodzielnie inaczej niz z uzyciem libpcap'a. Gdyby Ci sie udalo to musialbys sie bawic jeszcze wiecej bo pakiety mozna skladac na rozne sposoby - co zrobisz z powtorzonymi pakietami, pakietami przychodzacymi poza kolejnoscia albo takimi co nakladaja sie kawalek jeden na drugi? Jak je poskladasz?

    Jesli masz mozliwosc (a w sumie nadal nie wiem co piszesz) to proponuje uzywac bibliotek systemowych i niech one sie martwia o fragmentacje. Male fragmenty to byloby 1 bajt danych + naglowek TCP/IP, mniejszego pakietu nie zrobisz bo przeciez aby wyslac pakiet musi on byc poprawnego formatu w sensie adresy, flagi itd (no chyba ze przesylasz puste pakiety hihi to sam naglowek zostaje ale nie wiem czy tak mozna - nie sprawdzalem).

    Co do allokacji bufora jesli dobrze pamietam mozesz czytac takim buforem jakim chcesz - nawet po 1 bajcie i bedzie ok - bedzie wiecej "obrotow" w petli. Wydaje mi sie ze recv dostaje juz dane przetworzone przez stos IP wiec jestes logicznie o poziom wyzej niz fragmentacja i jej nie zobaczysz. Socket daje Ci dane a fragmentacje obsluguje system w sposob "automagiczny".

    Tak mi sie wydaje, wolalbym jednak aby wypowiedzial sie ktos inny kto zna te czesc lepiej niz ja.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Jeśli korzystasz z User Datagram Protocol to jeśli nie odbierzesz na raz jednego (już pofragmentowanego) pakietu, reszta idzie w piach... Tzn. jeśli oczekujesz 100B a przyjdzie 125B te 25B zostaje uciachanych. W TCP możesz brać jak Ci się podoba, po jednym bajcie, po dwa. Jak jest na RAW_SOCK'etach nie jestem pewien, ale wydaje mi się, że jeśli nie odbierzesz wszystkich danych, zostaną one stracone.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  8. #8
    h3x
    h3x jest offline Banned
    Zarejestrowany
    Dec 2007
    Postów
    271

    Domyślnie

    1. recvfrom odbiera ZAWSZE 1 pakiet. jak jest on wiekszy niz mtu zapisuje co moze (3 arg) i wywala -1.
    2. sendto wysyla zawsze, nie zwraca -1 chyba ze cos z deskryptorem jest zle. Fragmentacja zajmuje sie kernel.

    3. recv/send to wrappery, sluzace do tcp (WSARecvFrom/ WSASendTo pod winda). Odbieraja jak leci, wszystkie pakiety ze strumienia i zwracaja tyle ile odebraly. Ofc w przypadku send czeka na ack (tak, nieskonczonosc setsockopt i SO_RCVTIMEAO / SO_SNDTIMEAO od tego jest) a recv wysyla ack. Co jesli nie dojedzie? Serwerowi send zwroci -1 i bedzie chcial wysylac ten fragmet ponownie.

    do tego sam doszedlem z pomoca wiresharka.

    tqm, wiesz moze jak srworzyc socket raw, z ipproto_tcp? bo mi zwraca -1 =/

    Jak jest na RAW_SOCK'etach nie jestem pewien, ale wydaje mi się, że jeśli nie odbierzesz wszystkich danych, zostaną one stracone.
    raw socket nie rozni sie niczym od udp, no moze brakiem 1 headera. Zasada dzialania taka sama. No i mozna fajnie postawic backdoora, wykrywalne sa tylko pod tcp/udp.
    Ostatnio edytowane przez h3x : 03-15-2008 - 20:10

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj