1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| #include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <errno.h>
#define PORT 521
#define IP "192.168.2.1"
#define Source_IP "192.168.2.101"
#define Source_Port 48605
int winsock_err(int quit) {
char *error;
char err_resu[2000];
int l=0;
l=WSAGetLastError();
switch(l) {
case 10004: error = "Appel systeme interrompu"; break;
case 10009: error = "Numero de fichier incorrect"; break;
case 10013: error = "Permission refusee"; break;
case 10014: error = "Adresse incorrecte"; break;
case 10022: error = "Argument non valide"; break;
case 10024: error = "Trop de fichiers ouverts"; break;
case 10035: error = "L'operation serait bloquee"; break;
case 10036: error = "Operation en cours. Cette erreur est renvoyee si une fonction d'API Windows Sockets est appelee alors qu'une fonction bloquante est en cours";break;
case 10037: error = "Operation deja en cours"; break;
case 10038: error = "Operation Socket sur non-socket"; break;
case 10039: error = "Adresse de destination nécessaire"; break;
case 10040: error = "Message trop long"; break;
case 10041: error = "Type de protocole incorrect pour le socket"; break;
case 10042: error = "Protocole non disponible"; break;
case 10043: error = "Protocole non pris en charge"; break;
case 10044: error = "Type de socket non pris en charge"; break;
case 10045: error = "Opération non prise en charge sur le socket"; break;
case 10046: error = "Famille de protocoles non prise en charge"; break;
case 10047: error = "Famille d'adresses non prise en charge par la famille de protocoles"; break;
case 10048: error = "Adresse deja en cours d'utilisation"; break;
case 10049: error = "Impossible d'allouer l'adresse demandee"; break;
case 10050: error = "Reseau hors service. Cette erreur peut etre signalée a tout moment si l'implementation Windows Sockets detecte un echec sous-jacent."; break;
case 10051: error = "Le reseau n'est pas accessible"; break;
case 10052: error = "Le reseau a abandonne la connexion lors de la reinitialisation"; break;
case 10053: error = "Le logiciel a entraine l'abandon de la connexion"; break;
case 10054: error = "Connexion reinitialisée par un poste"; break;
case 10055: error = "Pas d'espace disponible dans la memoire tampon"; break;
case 10056: error = "Le socket est deja connecte"; break;
case 10057: error = "Le socket n'est pas connecte"; break;
case 10058: error = "Envoi impossible après l'arrêt du socket"; break;
case 10059: error = "Trop de références : impossible de raccorder"; break;
case 10060: error = "Delai de connexion depasse"; break;
case 10061: error = "Connexion refusee"; break;
case 10062: error = "Trop de niveaux de liens symboliques"; break;
case 10063: error = "Nom de fichier trop long"; break;
case 10064: error = "Le serveur hôte ne fonctionne plus"; break;
case 10065: error = "Pas d'itineraire pour le serveur hote"; break;
case 10066: error = "Dossier n'est pas vide"; break;
case 10067: error = "Trop de processus"; break;
case 10068: error = "Trop d'utilisateurs"; break;
case 10069: error = "Le Qouta du disc est depasse"; break;
case 10070: error = "Stale NFS file handle"; break;
case 10071: error = "Too many levels of remote in path"; break;
case 10091: error = "Renvoye par l'appel WSAStartup() ; indique que le sous-systeme du reseau est inutilisable"; break;
case 10092: error = "Renvoye par l'appel WSAStartup() ; indique que les DLL de Windows Sockets ne peuvent pas prendre en charge cette application"; break;
case 10093: error = "Winsock non initialise. Ce message est renvoye par n'importe quelle fonction à l'exception de l'appel WSAStartup() ; indique qu'un appel WSAStartup() reussi n'a pas encore ete realise"; break;
case 10101: error = "Deconnexion"; break;
case 11001: error = "Hôte introuvable. Ce message indique que la cle (nom, adresse, etc.) est introuvable"; break;
case 11002: error = "Serveur hote non decisionnaire introuvable. Cette erreur pourrait indiquer que le service de nom lui-meme ne fonctionne pas"; break;
case 11003: error = "Erreur non récupérable. Cette erreur peut indiquer que le service de nom lui-même ne fonctionne pas"; break;
case 11004: error = "Nom valide, aucune donnée du type demande enregistree. Cette erreur indique que la cle (nom, adresse, etc.) est introuvable"; break;
default: error ="Erreur inconnue"; break;
}
sprintf(err_resu, "[!]Erreur! Code : %d\n %s", error);
printf("\n%s\n",err_resu);
system("pause");
if (quit)
exit(1);
else
return l;
}
typedef struct udphdr {
unsigned short srcport;
unsigned short dstport;
unsigned short length;
unsigned short checksum;
} UDP_HDR;
unsigned short in_cksum(u_short * addr, int len) {
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer = 0;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1) {
*(u_char *) (&answer) = *(u_char *) w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}
int main(int argc, char *argv[]){
printf("[+]initialisation des varibles");
struct udphdr *udp;
unsigned short sizeofPacket;
char *packet = NULL, *ptr = NULL;
int len_sin;
SOCKET sock;
SOCKADDR_IN sin;
WSADATA data;
printf(" OK\n");
printf("[+]WSAStartup");
if( (WSAStartup(MAKEWORD(2,0), &data)) != 0)
winsock_err(1);
printf(" OK\n[+]Création du socket");
if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP))==INVALID_SOCKET )
winsock_err(1);
printf(" OK\n[+]Allocation mémoire");
udp = (struct udphdr *) malloc(sizeof(struct udphdr));
memset(udp, 0x0, sizeof(struct udphdr));
printf(" OK\n[+]Construction de la partie du packet UDP");
udp->srcport = htons(Source_Port);
udp->dstport = htons(PORT);
udp->length = htons(sizeof(struct udphdr));
udp->checksum = 0;
printf(" OK\n[+]Construction du packet");
sizeofPacket = sizeof(struct udphdr);
packet = (char *) malloc(sizeofPacket);
memset(packet, 0x0, sizeofPacket);
ZeroMemory(packet, sizeofPacket);
ptr = packet;
memcpy(ptr, udp, sizeof(struct udphdr));
ptr += sizeof(struct udphdr);
printf(" OK\n[+]Initialisation de la destination");
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(IP);
sin.sin_port=htons(PORT);
len_sin=sizeof(sin);
printf(" OK\n[+]Envois des données");
if (sendto(sock, packet, sizeofPacket, 0x0, (struct sockaddr *) &sin,len_sin) == SOCKET_ERROR)
winsock_err(1);
printf(" OK\n[+]TOUT C'est bien deroule\n");
closesocket(sock);
WSACleanup();
system("PAUSE");
return 0;
} |
Partager