Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-05-2003, 08:19   #1
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
quali funzioni per accedere al datagramma ethernet in linux

ciao, sto cercando dei link che descrivano le union e le struct che permettono di accedere al pacchetto ethernet...sto cercando da mezz'ora e non ho trovato nulla!
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2003, 09:05   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Prova a vedere qui dentro:

linux/if_ether.h
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2003, 16:10   #3
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
si c'avevo già guardato....in effetti il mio problema è più che altro di "formattazione"...per esempio un indirizzo fisico ethernet ( 6 coppie di cifre esadecimali separate dai : ) lo vorrei stampare così e invece me lo dà in decimale....poi ho anche dei problemi a stampare ( nel senso di cout<< o printf ) gli indirizzi ip quadripuntati..insomma mi incasino con htons inet_toa eccetera... se sapete dove trovare un buon tutorial sulla programmazione di rete oppure un bel sorgente da analizzare ( che per me è la cosa migliore.....)che faccia uso di ethhdr fatemelo sapere ...

ps: leggere gli header file non è proprio semplicissimo..... cosa vuol dire #endif ???
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 02-05-2003, 12:29   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
E' una direttiva al compilatore :

Solitamente comincia così:

#ifndef PIPPO
...
#endif

Se non è definito PIPPO... Per gli include si fa sempre questa cosa:

#ifndef PIPPO_H
#define PIPPO_H
...
#endif

Serve per evitare di includere più volte gli stessi header...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2003, 07:43   #5
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
ho un'altra domanda: se accedo all'header di un pacchettto ip che funzioni devo usare per trasformare l'indirizzo ip ( 32 bit) nella notazione quadripuntata che tutti conosciamo?? (accedo ai cambi s_addr[32] e d_addr[32] tramite un puntatore alla struct iphdr)...sono giorni che cerco questa funzione ma non l'ho trovata...
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2003, 08:03   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Io su Win uso inet_ntoa...dovrebbe essere la stessa...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2003, 18:16   #7
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
si ma probabilmente la usi su un puntatore dereferenziato alla struct sockaddr_in..ora sono su win e il sorgente ce l'ho in una partizione linux...inet_ntoa non può essere applicata direttamente ai campi indirizzi dell'header ip.....sto impazzendo...oltretutto non sono ancora riuscito a trovare la funzione che trasforma l'indirizzo mac decimale nella notazione normale....mi ci vorrebbe una enciclopedia con tutte le funzioni del c++
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2003, 18:54   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ah...ma te vuoi il dotted decimale dell'indirizzo MAC ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2003, 15:22   #9
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
no voglio la versione esadecimale saperata da :
per esempio 00:00:e3:99:f4:00
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2003, 15:29   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non te la puoi calcolare da solo ? E' banale
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 06:50   #11
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
mmmm...si tratterebbe di prendere 8 bit per volta (= due cifre esadecimali) e stampare un : tra ogni coppia....come faccio però a prendere 8 bit per volta da un numero di 48 bit ?( castarli in hex è facile)...
sto pensando che si potrebbe ottenere questa informazione ( x l'host, non per chi si collega) anche interrogando il dirver della scheda di rete...il guaio è che non ho la minima idea di come si faccia...
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 07:43   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Dimmi come sono memorizzati...sia il MAC che l'ip (soprattutto il tipo mi interessa)...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 15:03   #13
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
ho risolto il discorso MAC, avevi ragione, si fa prima a farlo che a dirlo...nell'header ethernet gli indirizzi mac di origine e destinazione sono array di 6 elementi di tipo char... nel c standard manca il tipo stringa ma cout e cin possono essere usati per l'input e l'output si array di char ( e solo di char, ovviamente ) quindi pesavo che bastasse una normale cout...ho risolto in modo piuttosto semplice: con un ciclo for prendo ciascuno dei 6 elementi , lo casto in un int e poi gli dico di sputarlo fuori in esadecimale e se l'elemento non è il sesto di affiancare i:...perfetto...

eccoti il codice:
for (int i = 0; i<6 ; i++)
{
cout<<hex<<int(ethernet_datagram->h_dest[i]);
if (i!=5) cout<<":";
}
cout<<endl;

hex lo usi includendo iomanip.h...

per l'indirizzo ip la vedo dura....perchè nell'header IP è un u_int32_t probabilmente un unsigned int che i programmatori di ip.h hanno definito da qualche altra parte...inet_ntoa forse va bene però il vi mi dice che non riesce a castare un u_int32_t in un tipo non scalare ( =l'indirizzo ip nella notazione classica):
suggerimenti?
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 15:25   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Si faceva bene anche con il C...
Codice:
char tmp[18];
sprintf(tmp,"%x:%x:%x:%x:%x:%x", e->h_dest[0], e->h_dest[1], ....);
Visto che in_addr è così:
Codice:
struct in_addr {
  union {
          struct { u_char s_b1,s_b2,s_b3,s_b4; }   S_un_b;
          struct { u_short s_w1,s_w2; }            S_un_w;
          u_long                                   S_addr;
  } S_un;
};
...prova così:
Codice:
in_addr addr;
addr.S_un.S_addr = (u_long)il_tuo_u_int32_t;
inet_ntoa(addr);
Prova così... Se ti viene visualizzato al contrario dimmile che bisogna convertirlo...
Altrimenti si ricorre al trucco:
Codice:
unsigned char *ip = (unsigned char *)&il_tuo_u_int32_t;
Dopo accedendo da ip[0] a ip[4] hai le varie parti dell'ip...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 18:03   #15
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
nell'ultimo pezzo di codice che significato ha & ?
grazie cmq domani provo..
forse non è cmq complicato, per esempio basterebbe prendere 8 bit alla volta dei 32 dell'indirizzo ip e castarli a int uno per uno...
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 18:14   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "BountyKiller"

nell'ultimo pezzo di codice che significato ha & ?
L'indirizzo della variabile... Gli faccio un cast ad un puntatore a char e poi mi guardo un byte alla volta...
Quote:
Originally posted by "BountyKiller"

forse non è cmq complicato, per esempio basterebbe prendere 8 bit alla volta dei 32 dell'indirizzo ip e castarli a in uno per uno...
Certo... Puoi semplicemente fare un AND con le varie maschere e con degli shift riportare i vari byte nella posizione meno significativa...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2003, 07:35   #17
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
scusa domanda scema....è ovvio che è l'operatore address of ....sarà il caldo ....cmq con i due esempi che mi hai proposto ho dei problemi...il primo mi dice che S_un non è un campo della struct in_addr ( e c'ha ragione..) nel secondo mi dice che è illegale il casting .. quasi proverei con la mascheratura..un po' rozzo ma semplice...non c'è bisogno di convertire in binario giusto? ( i numeri sono numeri cmq li rappresenti)...piuttosto per fare l'and bit a bit ? non l'ho mai fatto...
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2003, 10:49   #18
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
ho risolto come dicevo io...è incredibile come certe volte uno perde tempo a pensare a cose complicate e invece basta scrivere due righe di codice e risolvi il problema in cinque minuti...
eccoti la funzione con un main di prova:

//funzione che riceve in input il campo indirizzo ( sorgente e/o destinazione) dell'header IP

#include <iostream.h>
#include <iomanip.h>

void StampaIP(unsigned int indirizzo)
{
unsigned int maschera1=0x000000FF;
unsigned int maschera2=0x0000FF00;
unsigned int maschera3=0x00FF0000;
unsigned int maschera4=0xFF000000;
unsigned int ris1 = indirizzo & maschera1;
unsigned int ris2 = indirizzo & maschera2;
unsigned int ris3 = indirizzo & maschera3;
unsigned int ris4 = indirizzo & maschera4;
ris2 >>= 8;
ris3 >>= 16;
ris4 >>= 24;
cout<<ris4<<"."<<ris3<<"."<<ris2<<"."<<ris1<<endl;
}

void main()
{
unsigned int indirizzo;
cout<<"inserire un numero di 8 cifre esadecimali:"<<endl;
cin>>hex>>indirizzo;
cout<<"l'indirizzo IP e': ";
StampaIP(indirizzo);
}

l'ho provato adesso ed è ok: se indirizzo è effettivemente saddr o daddr va passato in host to network long, non so se è linux (mandrake9.1) che lo vuole così o la cpu del mio portatile ( pentium3 m) o tutti e due....pensandoci bene non è necessaria la mascheratura, basta fare 4 shift e dopo ciascuno shift assegnare i vari pezzi dell'indirizzo IP.
ora grazie alla mia funzione posso levarmi dalle palle la structsockaddr_in e usare solo i campi sadddr e daddr dell'header ip il che mi sembra più chiaro e pulito ...se ci sono altri problemi mi rifaccio vivo in questo thread, per intanto ti saluto e ti ringrazio (mi sembri un programmatore professionista..sbaglio? )
ciao!!
BK

ps: il programma che sto scrivendo è uno sniffer per rete locale..
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2003, 11:01   #19
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
ho un altra domanda> lo sniffer inizialmente chiede quanti pacchetti sniffare e per interromperlo prima che abbia finito devo schiacciare ctrl + c io vorrei che controllasse se, mentre sniffa, l utente ha premuto il tasto ESC, e se si si interrompe e fa vedere quello che ha sniffato...come faccio a fare un monitoraggio del tasto ESC?
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2003, 16:15   #20
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
cionci ci sei?? ( ma perchè con konqueror non posso usare le emotincohns????? )
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
La Francia scarica Windows: Linux divent...
L'Electronic Froniter Foundation via da ...
Death Stranding 2 diventa Steam Deck Ver...
TSMC spinge i chip per smartphone verso ...
OpenAI prepara un modello per la cybersi...
Il CMF Phone 3 Pro sta arrivando: tra le...
Le migliori offerte Amazon di oggi: robo...
Altro che ridimensionamento: OnePlus sta...
YouTube batte Netflix come rivale della ...
I nuovi ASUS ROG Zephyrus G14 e G16 (202...
Meno di 200€ per un robot aspirapolvere ...
La CPU torna protagonista: 400 milioni s...
Il nuovo pannello OLED top di gamma di S...
Offerte LEGO Amazon: Formula 1, Harry Po...
Il Motorola Edge 70 Pro sta arrivando e ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v