|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2004
Messaggi: 11
|
Socket su Solaris
Ho un problema con una macchina solaris...
La situazione e' la seguente # netstat -nr Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ------ --------- 172.24.12.32 172.24.12.41 U 1 89 eri0 138.132.65.0 138.132.65.141 U 1 477 eri1 224.0.0.0 138.132.65.141 U 1 0 eri1 default 138.132.65.1 UG 1 2 127.0.0.1 127.0.0.1 UH 3 579285 lo0 # ifconfig -a lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 eri0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 172.24.12.41 netmask ffffffe0 broadcast 172.24.12.63 ether 0:3:ba:2d:61:14 eri1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3 inet 138.132.65.141 netmask ffffff00 broadcast 138.132.65.255 ether 0:3:ba:2d:61:15 Quando vado ad aprire un socket sulla macchina e mando un messaggio verso l'indirizzo 172.24.12.36 (quindi dovrebbe passare dall'interfaccia eri0) mi ritrovo un pacchetto UDP che contiene nella testata SOURCE ADDRESS 138.132.65.141 Ovviamente chi riceve il pacchetto non risponde in quanto ritiene quel pacchetto CORROTTO per via dell'indirizzo di rete sbagliato Cosa sbaglio??????????? Perche' prende l'interfaccia eri1 come default??????? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Il pacchetto non è affatto corrotto, semplicemente segue un altro instradamento. Se chi lo riceve non ha regole di routing su come smistare i pacchetti di risposta verso 138.132.65.141, semplicemente scarta le risposte.
Il tuo problema potrebbe essere dovuto all'impossibilità di instradare pacchetti su eri0 (cavo difettoso?); in questo caso, è corretto che venga tentata la successiva regola di routing ammissibile (nel tuo caso la default route). A parte questo, mi sembra tutto in ordine ed è strano che non ti funzioni...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Jan 2004
Messaggi: 11
|
Quote:
purtroppo il cavo non è difettoso in quanto questo messaggio "difettoso" sulla eri1 viene prodotto in seguito alla ricezione (scambio di messaggi) sull'interfaccia eri0 (quindi sulla rete 138.x.x.x). Mi è stato detto addirittura che Solaris a volte sceglie A CASO l'interfaccia da utilizzare. Mi sembra assurdo. Così come mi sembra assurdo che un pacchetto verso la rete 172.x.x.x passi dall'interfaccia 138.x.x.x sicuramente c'è qualcosa che non va a livello di configurazione, ma NESSUNO riesce a dirmi cosa. ciao e grazie ancora |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
Fai una cosa, elimia la default route (e solo quella) e guarda se il traffico su eri0 torna normale. So che per i socket udp è possibile forzare l'allocazione di una specifica porta sorgente; non so se è possibile fare lo stesso per l'ip. Darò un'occhiata domani se trovo un pò di tempo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: Jan 2004
Messaggi: 11
|
Quote:
O magari si può ma mi manca qualche conoscenza base per poterlo fare... Vorrei solo sapere SU CHE BASE selezione l'interfaccia "opposta" al posto di quella già collegata sulla rete giusta... |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Come ti ho detto, lui consulta le regole dalla prima all'ultima; quando incontra una regola appropriata, tenta di utilizzare l'interfaccia indicata. Se non ci riesce, passa alla regola successiva.
Potrebbe anche succedere un'altra cosa: visto che per i pacchetti udp il kernel deve fare il possibile per tentare il recapito, ma senza particolari cure sulla duplicazione dei pacchetti, potrebbe decidere di mandare pacchetti udp identici sulle varie interfacce: in questo caso, se il pacchetto sulla eri0 va perso (può accadere con l'udp), arriva l'altro. Mi sembra assurdo sinceramente, ma non so se gli rfc lo consentono e se Solaris effettivamente fa così. Non puoi usare una connessione tcp?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Allora, per forzare un particolare indirizzo sorgente per un socket udp devi fare così (a parte la gestione errori ecc.):
Codice:
int fd;
struct sockaddr_in addr;
fd = socket(PF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = 0;
inet_aton("172.24.12.41", &addr.sin_addr);
bind(fd, (struct sockaddr *) &addr, sizeof(addr));
Non l'ho testato, ma dovrebbe funzionare.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: Jan 2004
Messaggi: 11
|
Quote:
Grazie per l'aiuto, ma facendo cosi' mi pare si fissi l'IP del destinatario e non del sorgente. Credo che l'interfaccia da utilizzare possa solo essere selezionata dal S.O. a questo punto... Se ho qualche news ti faccio sapere... |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
In sendto() passi porta/IP del destinatario.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:48.



















