dekapsulacja protokołu

0

Jak można dekapsulować własny protokół żeby informacje o nim wyświetlić np. w treeview?
public jakistyp DecapsulateProtocol(byte [])
{
//Tu dekapsulacja np. do treeview jak w WireShark
}

0

Jak można dekapsulować własny protokół żeby informacje o nim wyświetlić np. w treeview?

Tak samo jak enkapsułujesz, tylko odwrotnie... Nie mam pojecia co masz w tym protokole.

Żeby ta odpowiedź była konstruktywna: zainteresuj się klasą http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx, pewnie się przyda.

0

chodzi o to bym napisał jakieś metody za pomocą których ktoś inny dekapsulował protokół żeby wyświetlało mi w okienku dane o tym własnym protokole.

1

Pomogę: ten gość pyta jak zrobić API do sniffera, które będzie pozwalać na wyświetlanie drzewka struktur składowych dla danego pakietu, jak w WireSharku. Tak, zabiera się za to całkiem z d**y strony. Pomogłem?

0

ten gość pyta jak zrobić API do sniffera, które będzie pozwalać na wyświetlanie drzewka struktur składowych dla danego pakietu, jak w WireSharku.

Tak. Właśnie o to pytam.

0

W najprostszym wydaniu: niech plugin zwraca drzewo analogiczne do XMLowego, sam plugin niczego nie wyświetla, transformuje jedynie dane, z którymi frontend coś zrobi.

0

Jakieś metody dla kogoś innego do enkapsulacji jakiegoś protokołu. Nie tyle informacji na raz bo się pogubimy.
Pytanie: czy wiesz jak wygląda powiedzmy segment tcp z http w środku? W sensie chodzi mi o rozkład bajtów, nagłówki itp

0

Jakie klasy napisać by łatwo dekapsulować protokół?

0

Zgodne z SOLID. Już wcześniej dostałeś odpowiedź, na czym masz się wzorować. Zanim zadasz kolejne "techniczne" pytanie: pakiety rozkładasz w parserze do abstrakcyjnej reprezentacji i nic poza tym, dzięki temu będziesz w stanie np. dumpować je do formy XMLa, budować filtry itd. Zwrócone drzewo jest dopiero przetwarzane na inną (wizualną) reprezentację. Alternatywą jest napisanie swojego "systemu typów", tj. robisz bazę typów, w której masz typy proste (rozmiar i sposób interpretacji, zakres wartości) oraz agregaty, tj. unie i struktury pozostałych typów. Plugin/parser informuje aplikację, jaki typ na zastosować w danym przypadku, aplikacja czyta informacje o budowie typu i postępuje zgodnie z nimi.

0

Dorzucę jeszcze dwa keywordy: composite i DAG.

0

Napisałem takie klasy:

  public class CustomPacket
    {
        private List<FieldInfo> fieldlist;
        private string ProtocolName;

        public CustomPacket(string ProtocolName)
        {
            this.ProtocolName = ProtocolName;
            fieldlist = new List<FieldInfo>();
        }

        public void AddFieldInfo(FieldInfo fi)
        {
            fieldlist.Add(fi);
        }

        public string GetProtocolName()
        {
            return this.ProtocolName;
        }

        public List<FieldInfo> GetFieldInfoList()
        {
            return this.fieldlist;
        }
      
    }

    public class FieldInfo
    {
        private string fieldcode;
        private int bytescount;
        private byte [] hexsequence;

        List<Description> desclist;
        List<byte> hsequence;

        public FieldInfo(string fieldcode, int bytescount)
        {
            desclist = new List<Description>();

            this.fieldcode=fieldcode;
            this.bytescount=bytescount;           
        }

        public void AddHexByte(byte hexbyte)
        {
            hsequence.Add(hexbyte);
        }

        public List<byte> GetHexSequence()
        {
            return this.hsequence;
        }

        public void AddDescription(Description d)
        {
            desclist.Add(d);
        }

        public string GetFieldCode()
        {
            return this.fieldcode;
        }
        public int GetBytesCount()
        {
            return this.bytescount;
        }

        public List<Description> GetDescriptionList()
        {
            return this.desclist;
        }
                         
    }

    public class Description
    {
        Dictionary<byte,string> d;
        public Description()
        {
            d=new Dictionary<byte,string>();
        }

        public void AddDescription(byte hexcode,string hexdescription)
        {
            d.Add(hexcode,hexdescription);
        }

        public Dictionary<byte, string> GetDescriptionDictionary()
        {
            return this.d;
        }
    }

Ale mnie się nie podobają. Może ktoś napisać lepsze i pokazać przykładowy kod?

2

O ja pierniczę... Nie mogę Ci pomóc.

0

Czy wie ktoś jak się pisze szybki algorytm dekapsulacji własnego protokołu?
Mój algorytm przetwarza się 15 milisekund i przez to gubi pakiety :(

1
maszynaz napisał(a):

Czy wie ktoś jak się pisze szybki algorytm dekapsulacji własnego protokołu?

Powoli... Nie no, to się do Perełek nadaje.

maszynaz napisał(a):

Mój algorytm przetwarza się 15 milisekund i przez to gubi pakiety :(

Pomijając nierealgną wydajność (15 ms na przepisanie kilku pól binarnych do stringów???) to może zastanowisz się nad tym, czy absolutnie musisz robić dekapsulację każdego pakietu zaraz po odebraniu? Odbieranie powinno... odbierać, nic więcej. Najlepiej niech siedzi w oddzielnym wątku i pakuje pakiety w kolejkę.

Naprawdę nie jestem w stanie uwierzyć w 15 ms, to jest 66 powtórzeń na sekundę, gry z rendererami software'owymi wyciągają więcej. W piątek zamiast własnego sniffera chciałeś pisać plugin do wiresharka, teraz znowu wracasz do swojego, skacząc w taki sposób po projektach niczego się nie nauczysz i niczego nie ukończysz. Może czas zacząć zadawać WŁAŚCIWE pytania i zarozumieć, że OOP nie oznacza Orbit Oriented Programming?

0

Kiedy dodaję wiersz:

DateTime start = DateTime.Now;
dt.Rows.Add(dr);
DateTime stop = DateTime.Now;
Text = (stop - start).Milliseconds.ToString();
 

to mi wyświetla 0 milisekund. To znaczy, że wykonuje się szybko czy zrobiłem jakiś błąd, że nie wyświetla prawdziwego czasu wykonania.

1
maszynaz napisał(a):

to mi wyświetla 0 milisekund. To znaczy, że wykonuje się szybko czy zrobiłem jakiś błąd, że nie wyświetla prawdziwego czasu wykonania.

"Szybko"? To znaczy jedynie tyle, że jesteś w stanie dodać więcej niż tysiąc rekordów na sekundę. Przecież .NET ma klasy do profilowania kodu, dlaczego bierzesz nieprecyzyjny licznik z niewieką precyzją?

Druga sprawa, po cholerę uparłeś się na DataTable? Przecież to jest relacyjna struktura danych używana do opakowywania m. in. rekordów z baz, posiada dynamicznie definiowane kolumny itd. Jaki sens ma stosowanie DT przy rozpakowywaniu pakietów?

0

Jak już tak mierzysz to może mierz z głową, ok? Samo dodanie do DataTable nie musi być zbyt kosztowne ponieważ dodajesz już utworzony wiersz, jeżeli chcesz coś mierzyć to mierz całość, razem z tworzeniem... Ticki przeliczaj na cywilizowane jednostki czasu.

0

cały czas rośnie mi czas dekapsulacji pakietu. Zaczyna od 7 milisekund a teraz jest 26 i rośnie dalej :(

0

A mnie ciśnienie rośnie jak na to patrzę.

Prawdopodobnie dodanie do DataTable (lub jego konsekwencje, np. powiązanie z GUI!) powoduje przeiterowanie po całej kolekcji, więc dekapsulacja ma koszt liniowy względem ilości istniejących elementów (zamiast stałego). Weź rzuć to w cholerę i sięgnij po podręcznik do algorytmów i struktur danych, naucz się PODSTAW i pakuj ze zrozumieniem.

0

A co się właściwie dzieje.
Czas wykonywania kodu w wątku ciągle mi rośnie z 20 ms, 40ms, 50ms itd... Ale ilość wątków cały czas jest w miarę stała: raz 5, 20,nawet 70 a później znowu 7,9,5.

Edit:

 SetText(stopw.ElapsedMilliseconds.ToString() + "  " + Thread.CurrentThread.ManagedThreadId.ToString());

Wyświetla rosnący czas 20,100,200,300ms... i ID wątku jest cały czas 9.
O co tu chodzi?

Edit2:
dodałem stopwatch.Reset(); i teraz już dobrze wyświetla.

0

Dopóki nie zrobisz tak jak pisał PS czyli nie będziesz tych pakietów dodawał do jakiejś sensownej kolekcji (Queue<T> na przykład) to nie będziemy z Tobą rozmawiać :P

1
Sarrus napisał(a):

to nie będziemy z Tobą rozmawiać :P

Po tym, jak przeczytałem:

maszynaz napisał(a):

dodałem stopwatch.Reset(); i teraz już dobrze wyświetla.

To już chyba nic nie pomoże... Jego zdolność interpretacji wyników (i olewania udzielanych odpowiedzi) jest tak niezwykła, że chyba nabrałem chęci podziwiania jej bez słowa.

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