View Single Post
Old 13-06-2005, 20:09   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Cittā: Roma
Messaggi: 15625
Comunque ti do uno spunto che, almeno personalmente, potresti provare. Devi applicare un paio di patch al kernel (rigorosamente non testate in esecuzione):

La prima č alquanto dubbia, ma per quello che devi fare potrebbe andar bene. E' una modifica al layer socket che consente di tenere traccia del pid del creatore di un socket:
Codice:
--- linux-2.6.11.4/net/socket.c.org	2005-06-13 20:51:53.000000000 +0200
+++ linux-2.6.11.4/net/socket.c	2005-06-13 20:39:11.000000000 +0200
@@ -404,6 +404,7 @@
 		file->f_mode = FMODE_READ | FMODE_WRITE;
 		file->f_flags = O_RDWR;
 		file->f_pos = 0;
+		file->f_owner.pid = get_current()->pid;
 		fd_install(fd, file);
 	}
La seconda č una patch al modulo ip_queue. Invece di inserire un campo pid nella struct ipq_packet_msg (sarebbe l'ideale, ma ti obbligherebbe a ricompilare anche iptables), "riciclo" il campo timestamp_usec per metterci dentro il pid:
Codice:
--- linux-2.6.11.4/net/ipv4/netfilter/ip_queue.c.org	2005-06-13 20:56:37.000000000 +0200
+++ linux-2.6.11.4/net/ipv4/netfilter/ip_queue.c	2005-06-13 20:56:28.000000000 +0200
@@ -234,7 +234,9 @@
 	pmsg->packet_id       = (unsigned long )entry;
 	pmsg->data_len        = data_len;
 	pmsg->timestamp_sec   = entry->skb->stamp.tv_sec;
-	pmsg->timestamp_usec  = entry->skb->stamp.tv_usec;
+//	pmsg->timestamp_usec  = entry->skb->stamp.tv_usec;
+	pmsg->timestamp_usec  = entry->skb->sk->sk_socket->file ? 
+		entry->skb->sk->sk_socket->file->f_owner.pid : 0;
 	pmsg->mark            = entry->skb->nfmark;
 	pmsg->hook            = entry->info->hook;
 	pmsg->hw_protocol     = entry->skb->protocol;
Ho verificato che, almeno nella catena OUTPUT della tabella nat (quella che ti interessa, per i programmi locali), il risultato č corretto per un programma a singolo thread. Non ti consiglio di usare QUEUE per le altre catene; te lo sconsiglio vivamente per le catene di ingresso, qualsiasi esse siano (non ho verificato la patch su queste; se ti va bene, il campo ->file č nullo e non succede altro; se ti va male, c'č una "remota" possibilitā di kernel oops )

Quote:
mmmhh...
me la devo pensare meglio
Apri /proc/<pid>/maps, prendi i file indicati nei segmenti marcati "x" (eseguibile), e ne fai l'md5sum. I path sono assoluti, LD_PRELOAD č fregato.
__________________
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

Ultima modifica di ilsensine : 13-06-2005 alle 20:11.
ilsensine č offline   Rispondi citando il messaggio o parte di esso