abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 12:55 | Nová verze

    Microsoft vydal novou velkou aktualizaci 2404.23 v září 2019 pod licencí SIL Open Font License (OFL) zveřejněné rodiny písma Cascadia Code pro zobrazování textu v emulátorech terminálu a vývojových prostředích.

    Ladislav Hagara | Komentářů: 0
    dnes 05:33 | Nová verze

    OpenTofu, tj. svobodný a otevřený fork Terraformu vzniknuvší jako reakce na přelicencování Terraformu z MPL na BSL (Business Source License) společností HashiCorp, bylo vydáno ve verzi 1.7.0. Přehled novinek v aktualizované dokumentaci. Vypíchnout lze State encryption.

    Ladislav Hagara | Komentářů: 0
    včera 23:55 | Humor

    Spouštět webový prohlížeč jenom kvůli nákupu kávy? Nestačí ssh? Stačí: ssh terminal.shop (𝕏).

    Ladislav Hagara | Komentářů: 5
    včera 18:11 | Nová verze

    Yocto Project byl vydán ve verzi 5.0. Její kódové jméno je Scarthgap. Yocto Project usnadňuje vývoj vestavěných (embedded) linuxových systémů na míru konkrétním zařízením. Cílem projektu je nabídnou vývojářům vše potřebné. Jedná se o projekt Linux Foundation.

    Ladislav Hagara | Komentářů: 0
    včera 17:56 | Nová verze

    Operační systém 9front, fork operačního systému Plan 9, byl vydán v nové verzi "do not install" (pdf). Více o 9front v FQA.

    Ladislav Hagara | Komentářů: 0
    včera 13:11 | Nová verze

    Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána v nové verzi 6.1. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu. Řešeny jsou také 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 3
    včera 12:33 | Zajímavý software

    Lennart Poettering na Mastodonu představil utilitu run0. Jedná se o alternativu k příkazu sudo založenou na systemd. Bude součástí systemd verze 256.

    Ladislav Hagara | Komentářů: 20
    29.4. 23:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové major verzi 3.0 postavené na Qt5/KDE Frameworks 5. Předchozí verze 2.9.0 vyšla před 6 lety a byla postavená na Qt4. Portace Amaroku na Qt6/KDE Frameworks 6 by měla začít v následujících měsících.

    Ladislav Hagara | Komentářů: 13
    29.4. 21:44 | Komunita

    Ubuntu 24.10 bude Oracular Oriole (věštecká žluva).

    Ladislav Hagara | Komentářů: 14
    29.4. 20:22 | Nová verze

    Byla vydána nová verze 2.45.0 distribuovaného systému správy verzí Git. Přispělo 96 vývojářů, z toho 38 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání. Vypíchnout lze počáteční podporu repozitářů, ve kterých lze používat SHA-1 i SHA-256.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (16%)
    Celkem 893 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    16.1.2014 23:38 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Cteni DNS headeru v C pomoci pcap
    Ahoj, mam za ukol z DNS paketu (krom jineho) vytisknout nasledujici informace z DNS headeru:
    obsah dotazu (queries) – name, type, class
    obsah odpovědí (answers) – name, type, class, TTL, address
    
    Asi by to melo vypadat nejak takto :
    
        Transaction ID: 0x241a
    
       Questions: 1
        Answer RRs: 3
        Authority RRs: 0
        Additional RRs: 0
        Queries
            www.google.com: type A, class IN
                Name: www.google.com
                Type: A (Host address)
                Class: IN (0x0001)
        Answers
            www.google.com: type CNAME, class IN, cname www.l.google.com
                Name: www.google.com
                Type: CNAME (Canonical name for an alias)
                Class: IN (0x0001)
                Time to live: 3 days, 21 hours, 52 minutes, 57 seconds
                Data length: 18
                Primary name: www.l.google.com
            www.l.google.com: type A, class IN, addr 66.249.89.99
                Name: www.l.google.com
                Type: A (Host address)
                Class: IN (0x0001)
                Time to live: 3 minutes, 47 seconds
                Data length: 4
                Addr: 66.249.89.99
            www.l.google.com: type A, class IN, addr 66.249.89.104
                Name: www.l.google.com
                Type: A (Host address)
                Class: IN (0x0001)
                Time to live: 3 minutes, 47 seconds
                Data length: 4
                Addr: 66.249.89.104
    
    Priznam se, ze tomu zatim moc nerozumim, z toho, co jsem si nastudoval jsem schopny dat dohromady jen zakladni info, typ, class, TTL, adresu. Zatim nechpu jak ziskat jmeno, jak rozlisit dns pakety (query nebo answer). Nejak se tomu nemuzu dostat pod kuzi. Zatim jsem napsal fci na tisknuti packetu, vyuzivajici pcap, ktera dostava z main funkce packet (prikladam jeste dalsi pomocne fce, ktere fuknce print_packet() vyuziva:
    
    void print_mac(unsigned char* mac){
    	int i;
    	for(i=0; i<6; i++){
    		if(i!=0) printf(":");
    		printf("%X",mac[i]);
    	}
    }
    
    char* print_url(char data[]){
    	int i=0;
    	int toread = data[0];
    	int start = 0;
    	i++;
    
    	while(toread != 0){
    		//printf(".");
    		// print everything bettween the dots
    		for(; i<=start+toread; i++)
    			printf("%c",data[i]);	
    		// next chunk
    		toread = data[i];
    		start = i;
    		i++;
    	}
    	// return a char* to the first non-url char
    	return &data[i];
    }
    
    
    
    int sizeofUrl(char data[]){
    	int i = 0;
    	int toskip = data[0];
    
    	// skip each set of chars until (0) at the end
    	while(toskip!=0){
    		i += toskip+1;
    		toskip = data[i];
    	}
    	// return the length of the array including the (0) at the end
    	return i+1;
    }
    
    void printRRType(int i){
    	switch(i){
    		case 1:
    			printf("IPv4 address record");
    			break;
    		case 15:
    			printf("MX mail exchange record");
    			break;
    		case 18:
    			printf("AFS database record");
    			break;
    		case 28:
    			printf("IPv6 address record");
    			break;
    		default:
    			printf("unknown (%d)",i);
    	}
    }
    
    void print_packet(void *pack) {
        char *tab = "   ";
        // listening with an eth header	
        packet_desc* pd = (packet_desc*) pack;
    
        int numRRs = ntohs(pd->dns.qdcount) + ntohs(pd->dns.ancount) + ntohs(pd->dns.nscount) + ntohs(pd->dns.arcount);
        int i;
    	
        for (i = 0; i < numRRs; i++) {
            static_RR *RRd = (static_RR*) ((void*) pd->data + sizeofUrl(pd->data));
            int type = ntohs(RRd->type);
            int clas = ntohs(RRd->clas);
            int ttl = (uint32_t) ntohl(RRd->ttl);
            uint8_t *rd = (void*) (&RRd->rdlength + sizeof (uint16_t));
    
            printf("L2(MAC):\n");
            
            printf("%ssource MAC:", tab);
            print_mac(pd->eth.shost);
            printf("\n");
            printf("%sdestination MAC:",tab);
            print_mac(pd->eth.dhost);   
            printf("\n");
            
            printf("L3(IP):\n");
            printf("%ssource:%s\n", tab, inet_ntoa(pd->ip.src));
            printf("%sdest:%s\n", tab, inet_ntoa(pd->ip.dst));
    
            printf("L4:(UDP)\n");
            printf("%ssource port:%d\n", tab, ntohs(pd->udp.sport));
            printf("%sdest port:%d\n", tab, ntohs(pd->udp.dport));
    
            printf("DNS:\n");
            printf("%sid:%d\n", tab, ntohs(pd->dns.id));
            printf("%s# questions:%d\n", tab, ntohs(pd->dns.qdcount));
            printf("%s# answers:%d\n", tab, ntohs(pd->dns.ancount));
    
            printf("RESOURCE RECORDS\n");
                    
            printf("\n");
            printf("%stype(%d):", tab, type);
            //printf("%sflags:%d\n", tab, ntohs(pd->dns.flags));
            printRRType(ntohs(RRd->type));
            printf("\n");
            printf("%sclass:%d\n", tab, clas);
            printf("%sTTL:%d\n", tab, ttl);
            printf("%saddress:", tab);
            printf("%d.%d.%d.%d\n", rd[0], rd[1], rd[2], rd[3]);
    
            printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
    
        }
    
    }
    
    Pro zpracovani packetu mam nasledujici struktury, jakozto hlavicky headeru jednotlivych vrstev sitove logiky:
    
    
    #define ETHER_ADDR_LEN	6
    
    typedef u_int tcp_seq;
    
    struct ether_header {
        unsigned char dhost[ETHER_ADDR_LEN]; // Destination host address
        unsigned char shost[ETHER_ADDR_LEN]; // Source host address
        unsigned short type; // IP? ARP? RARP? etc
    };
    
    struct ip_header {
        unsigned char vhl; // version << 4 | header length >> 2
        unsigned char tos; // type of service
        unsigned short len; // total length
        unsigned short id; // identification
        unsigned short off; // fragment offset field
        unsigned char ttl; // time to live
        unsigned char prot; // protocol
        unsigned short sum; // checksum
        struct in_addr src;
        struct in_addr dst; // source and dest address 
    };
    
    struct udp_header {
        unsigned short sport; // source port
        unsigned short dport; // destination port
        unsigned short length; // udp length
        unsigned short checksum; // udp checksum
    };
    
    struct dns_header {
        unsigned short id;
        unsigned short flags;
        unsigned short qdcount;
        unsigned short ancount;
        unsigned short nscount;
        unsigned short arcount;
    };
    
    typedef struct {
        uint16_t type;
        uint16_t clas;
        uint32_t ttl;
        uint16_t rdlength;
    } static_RR;
    
    typedef struct {
        struct ether_header eth;
        struct ip_header ip;
        struct udp_header udp;
        struct dns_header dns;
        char data[0];
    } packet_desc;
    
    #endif
    
    Potrebuji tedy nejak vydolovat hostname z jednotlivych packetu a rozlisit je podle toho, zda jsou query, nebo answer a jejich obsah vypsat, jak bylo uvedeno na zacatku.

    Moz by me pomohla jakaloliv rada, protoz ted jsme v tom hodne zamotany a nevim jak dal. Snad nejak upravit struktury?

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.