Sockets
-
Sers,
Ich versuche hier eine Anfrage an meinen PC mit gefälschtem IP-Header zu machen.
Ich hab das von einem Quelltext für Linux. Hab es auch Linux richtig compiliert bekommen (schon ne Weile her...)Für Windows bekomm ich es auch compiliert aber es läuft nicht wie ich will.
Hier der Code:// includes #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #include <stdio.h> // header struct iphdr { unsigned int len:4; unsigned int ver:4; unsigned char tos; unsigned short total_len; unsigned short ident; unsigned short frag_and_flags; unsigned char ttl; unsigned char proto; unsigned short checksum; unsigned int sourceIP; unsigned int destIP; }; //Header TCP struct tcphdr { unsigned short sport; unsigned short dport; unsigned int seqnum; unsigned int acknum; unsigned char DataOffset; unsigned char Flags; unsigned short Windows; unsigned short Checksum; unsigned short UrgPointer; }; // main entry int main(int argc, char *argv[]) { // private WSADATA wsa; int s; unsigned int on=1; struct iphdr *ip; struct tcphdr *tcp; struct sockaddr_in to; struct in_addr addr; char buffer[1024]; // setup winsock WSAStartup(MAKEWORD(2,2), &wsa); // create socket if((s = socket(AF_INET, SOCK_RAW, IPPROTO_TCP))==-1){ printf("socket() error\n"); return 0; } // set some options if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char*)&on, sizeof(on)) == -1){ printf("setsockopt() error\n"); return -1; } // create header ip = (struct iphdr*) buffer; tcp = (struct tcphdr*) (buffer + sizeof(struct iphdr)); memset(ip, 0, sizeof(struct iphdr)); ip->ver = 4; ip->len = 5; ip->total_len = htons(sizeof(struct iphdr) + sizeof(struct tcphdr)); ip->ident = 2; ip->ttl = 255; ip->proto = IPPROTO_TCP; ip->sourceIP = inet_addr("192.168.1.11"); ip->destIP = inet_addr("192.168.1.12"); memset(tcp, 0, sizeof(struct tcphdr)); tcp->sport = htons(1024); tcp->dport = htons(54321); tcp->seqnum = 2; tcp->DataOffset = 5; tcp->acknum = 1; tcp->Windows = htons(65535); to.sin_addr.S_un.S_addr = ip->destIP; to.sin_family = AF_INET; to.sin_port = tcp->dport; printf("Ziel: %s:%i\n", inet_ntoa(to.sin_addr), ntohs(tcp->dport )); addr.s_addr = ip->sourceIP ; printf("Quelle: %s:%i\n", inet_ntoa(addr), ntohs(tcp->sport )); if(sendto(s, buffer, ntohs(ip->total_len ), 0, (sockaddr*)&to, sizeof(to))==-1){ perror("sendto() error"); } // quit getchar(); return 0; }
Bei sendto() bekomm ich diesen Fehler:
sendto() error: no error
Mmhh.
Naja vielleicht kann mir ja jemand helfen. Vielleicht auch jemand aus der Linuxecke...cu para
-
hi
ich bekomme diesen Code gar nicht erst kompiliert immer diese errors, hat jemand ne ahnung?
http://home.tiscalinet.ch/teuffenthal/Different/das.bmp
sorry das ich immer so komische sachen frage, aber bin neu in C, vorher nur vb
-
Versuch's mal mit SOCKADDR* (also in Großbuchstaben) - evtl. ist auch dein PSDK zu alt
Und poste doch bitte das nächste mal direkt die Fehlermeldungen und nicht als Bild (und schon gar nicht als BMP )
-
Hatte ein bisschen stress beim uploaden
werde es morgen testen.
-
Hi habe ihn jetzt compiliert aber bekomme beim ausführen immer dieser error:
setsockopt<> errorhat jemand ne idee könnte es an win98 liegen ?
-
Hallo,
die Kombination IPPROTO_IP/IP_HDRINCL wird für Win98 nicht unterstützt, siehe hier
MfG
-
hi danke gibt es irgendein anderer weg das gleichwohl zum laufen zu bringen, oder ein patch oder so etwas für win98?
-
mit http://winpcap.polito.it/ kannst du auch unter win9x pakete komplett selbst bauen und versenden
-
ich habe es installiert, aber es funzt leider immer noch nicht!
-
sry bin dumm, muss natürlich etwas komplett neues schreiben mit winpcap, aber ich fand in den docs gerade nicht was flags senden kann, hat noch jemand ideen?
gb