Do prodeje jde tichá bezdrátová herní myš Logitech PRO X2 SUPERSTRIKE s analogovými spínači s haptickou odezvou (HITS, Haptic Inductive Trigger System). Cena je 4 459 Kč.
Microsoft na GitHubu zveřejnil zdrojový kód projektu LiteBox, jedná se o 'knihovní operační systém' (library OS) zaměřený na bezpečnost, využívající systémovou architekturu LVBS k ochraně jádra před útoky z uživatelského prostoru. LiteBox je napsán v Rustu a uvolněný pod licencí MIT. Projekt je teprve v rané fázi vývoje.
BreezyBox je open-source shell a virtuální terminál pro populární jednočip ESP32. Nabízí základní unixové příkazy, sledování aktuálního pracovního adresáře (CWD), jednoduchý instalátor a spouštěč aplikací v podobě ELF binárních souborů, zabudovaný HTTP server nebo třeba ovládání WiFi - ukázka použití coby 'malého osobního počítače'. Ačkoliv je BreezyBox inspirovaný BusyBoxem, oproti němu má tento projekt několik externích závislostí, zejména na ESP-IDF SDK. BreezyBox je dostupný pod licencí MIT.
Byl představen cross-assembler xa.sh, napsaný čistě v Bourne shell skriptu. Tento nástroj umožňuje zpracovávat assemblerový kód pro Intel 8080, přičemž je možné snadno přidat podporu i pro další architektury, například 6502 a 6809. Skript využívá pouze různé běžné unixové příkazy jako jsou awk, sed nebo printf. Skript si lze stáhnout z GitHubového repozitáře projektu.
Byla představena nová verze modelu Claude Opus 4.6 od společnosti Anthropic. Jako demonstraci možností Anthropic využil 16 agentů Claude Opus 4.6 k vytvoření kompilátoru jazyka C, napsaného v programovacím jazyce Rust. Claude pracoval téměř autonomně, projekt trval zhruba dva týdny a náklady činily přibližně 20 000 dolarů. Výsledkem je fungující kompilátor o 100 000 řádcích kódu, jehož zdrojový kód je volně dostupný na GitHubu pod licencí Creative Commons.
Kultovní britský seriál The IT Crowd (Ajťáci) oslavil dvacáté výročí svého prvního vysílání. Sitcom o dvou sociálně nemotorných pracovnících a jejich nadřízené zaujal diváky svým humorem a ikonickými hláškami. Seriál, který debutoval v roce 2006, si i po dvou dekádách udržuje silnou fanouškovskou základnu a pravidelně se objevuje v seznamech nejlepších komedií své doby. Nedávné zatčení autora seriálu Grahama Linehana za hatecrime však vyvolává otázku, jestli by tento sitcom v současné Velké Británii vůbec vznikl.
Společnost JetBrains oznámila, že počínaje verzí 2026.1 budou IDE založená na IntelliJ ve výchozím nastavení používat Wayland.
Společnost SpaceX amerického miliardáře Elona Muska podala žádost o vypuštění jednoho milionu satelitů na oběžnou dráhu kolem Země, odkud by pomohly zajistit provoz umělé inteligence (AI) a zároveň šetřily pozemské zdroje. Zatím se ale neví, kdy by se tak mělo stát. V žádosti Federální komisi pro spoje (FCC) se píše, že orbitální datová centra jsou nejúspornějším a energeticky nejúčinnějším způsobem, jak uspokojit rostoucí poptávku po
… více »Byla vydána nová verze 2.53.0 distribuovaného systému správy verzí Git. Přispělo 70 vývojářů, z toho 21 nových. Přehled novinek v poznámkách k vydání.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 216. sraz, který proběhne v pátek 20. února od 18:00 v Red Hat Labu (místnost Q304) na Fakultě informačních technologií VUT v Brně na ulici Božetěchova 1/2. Tématem srazu bude komunitní komunikační síť MeshCore. Jindřich Skácel představí, co je to MeshCore, předvede nejrůznější klientské zařízení a ukáže, jak v praxi vypadá nasazení vlastního repeateru.
obsah dotazu (queries) – name, type, class obsah odpovědí (answers) – name, type, class, TTL, addressAsi 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?
Řešení dotazu:
ntohs()prevede sitovy big endian na little endian (resp na byte order, ktery pouziva pocitac, na kterem program bezi).
void handleDNS(struct sniff_dns* dns, int size);ten parametr size. Co to ma presne byt? Velikost ceho?
dns.
sizeof(pd->dns)? To neprochazi, kdyz to mam ve fci, ktera tiskne paket:
#define SIZE_DNS sizeof(struct dns_header)
void print_packet(void *pack) {
char *tab = " ";
// listening with an eth header
packet_desc* pd = (packet_desc*) pack;
........................
........................
handleDNS(&pd->dns, sizeof(pd->dns));
}
to mi ve odkazovane funkci:
void handleDNS(struct dns_header* dns, int size)
{
// point past /* IMPORTANT * this is detected by port number, so could be bad data * therefore treat everything as a hint * and don't go over size */
int i;
int j=0;
int psize=size-SIZE_DNS;
if(psize<=0){
printf("WARNING: Too small to be DNS\n");
}
............
...........
}
vyhodi:
WARNING: Too small to be DNSA nasledne segfault Pripominam, ze dns header:
struct dns_header {
unsigned short id;
unsigned short flags;
unsigned short qdcount;
unsigned short ancount;
unsigned short nscount;
unsigned short arcount;
};
Je soucasti struktury packetu:
typedef struct {
struct ether_header eth;
struct ip_header ip;
struct udp_header udp;
struct dns_header dns;
char data[0];
} packet_desc;
sniff_dns* dns, ale musí to obsahovat celý záznam a to size udává jak je to celé veliké včetně sniff_dns, která je na začátku. Rozhodně tam němůže být sizeof(pd->dns), to nemáš žádný obsah jen hlavičku sniff_dns...
musí to obsahovat celý záznamCo je je to "to" co musi obsahovat cely zaznam? Tomu fakt nerozumim. Co je mysleno tim celym zaznamem, cela struktura
typedef struct {
struct ether_header eth;
struct ip_header ip;
struct udp_header udp;
struct dns_header dns;
char data[0];
} packet_desc;
To mi nedava smysl, protoze do funkce ma jit jen ukazatel na dns header, nevim co chces rict, priklad by asi pomohl vic.
void packet_callback(unsigned char *useless, const struct pcap_pkthdr* pkthdr, const unsigned char* packet) {
packet_desc *pd = (packet_desc*) packet;
int time = pkthdr->ts.tv_sec * 1000000.0 + pkthdr->ts.tv_usec;
;
printf("received at %d a packet: %d/%d\n", time, pkthdr->caplen, pkthdr->len);
print_packet(pd, pkthdr->len);
printf("\n");
}
tak je ten parametr size, ktery vyzaduje funkce parse_DNS() myslen pkthdr->len?
Předem zapomeň na to, že vím co to má přesně dělat (tak moc jsem to nestudoval) a že vím jak vypadají ty packety :).
Ale řádek 93 (v odkazovaném) s spočítá ofset za sniff_dns a v řádku 97 se nastaví ukazatel payload na tuto oblast co je za sniff_dns a kde se vyčítají ty další informace.
size = size of memeory block vvvvvvvvvv
----------------------------------------
dns−> ---------------------
u_short dns_id;
u_short dns_flags;
u_short dns_qdc;
u_short dns_anc;
u_short dns_nsc;
u_short dns_arc;
payload−> --------------------- // ((u_char*) dns) + SIZE_DNS ; SIZE_DNS = sizeof(struct sniff_dns)
Parsovaná DATA
----------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
V tom bloku paměti za tou strukturou se jede a čte i pomocí fce parseDomain(), které to předává ukazatel na tuto oblast a aktuální offset v ní.
Ten ukazatel dns by mohl být klidně void *, ale takto je to zjednodušené, protože pro údaje o hlavbičce nemusíš přetypovávat.
Zápis ((u_char*) dns) + SIZE_DNS provede přetypování ukazatele na u_char* a pak přičte velikost struktury a protože je ukazatel typu u_char* (unsigned char *), tak se přičte SIZE_DNS*sizeof(unigned char), tedy počet bytů, tedy to pak ukazuje na data za tou strukturou. (jestli je můj výklad moc zmatený, tak pointerová aritmetika to je :))
typedef struct {
uint16_t type;
uint16_t clas;
uint32_t ttl;
uint16_t rdlength;
} static_RR;
Ve funkci pro tisknuti packetu pak tuto strukturu dostane timto prikazem:
static_RR* RRd = (static_RR*)((void*)pd->data + sizeofUrl(pd->data));Mohl bych udelat neco podobneho, kdyz bych si nadefinoval strukturu pro DNS query? napriklad takto:
typedef struct
{
unsigned short qtype;
unsigned short qclass;
}query;
Tiskni
Sdílej: