Boltzmann
02-04-2008, 20:17
Ciao a tutti sono un nuovo iscritto...
dunque "programmo" su linux e sto provando a creare un syn port scanner utilizzando i raw socket. Mi riservo quindi la libertà di settare autonomamente l'header TCP, ma incontro un problema quando devo calcolare il checksum TCP. Ho trovato questa funzione http://www.netfor2.com/tcpsum.htm e l'ho applicata nel modo seguente:
#include <netinet/tcp.h>
....
struct tcphdr tcph;
....
tcph.doff= 5;
tcph.check= 0;
tcph.check= tcp_sum_calc(tcph.doff * 4, (u16 *)&local.s_addr, (u16 *)&addr.sin_addr.s_addr, 0, (u16 *)&tcph);
Sto inviando un pacchetto privo di data payload, perciò la lunghezza dei dati è sempre 0 quindi pari. Perchè lo sniffer rivela sempre un checksum sbagliato?
In questo caso local.s_addr addr.sin_addr.s_addr "contengono" entrambi "127.0.0.1" (sto scansionando localhost) comunque non credo di aver sbagliato gli argomenti della funzione.
dunque "programmo" su linux e sto provando a creare un syn port scanner utilizzando i raw socket. Mi riservo quindi la libertà di settare autonomamente l'header TCP, ma incontro un problema quando devo calcolare il checksum TCP. Ho trovato questa funzione http://www.netfor2.com/tcpsum.htm e l'ho applicata nel modo seguente:
#include <netinet/tcp.h>
....
struct tcphdr tcph;
....
tcph.doff= 5;
tcph.check= 0;
tcph.check= tcp_sum_calc(tcph.doff * 4, (u16 *)&local.s_addr, (u16 *)&addr.sin_addr.s_addr, 0, (u16 *)&tcph);
Sto inviando un pacchetto privo di data payload, perciò la lunghezza dei dati è sempre 0 quindi pari. Perchè lo sniffer rivela sempre un checksum sbagliato?
In questo caso local.s_addr addr.sin_addr.s_addr "contengono" entrambi "127.0.0.1" (sto scansionando localhost) comunque non credo di aver sbagliato gli argomenti della funzione.