Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- void printconnerror()
- {
- switch (errno) {
- case ETIMEDOUT : printf("Connection timed out.\n"); break;
- case ECONNREFUSED : printf("Connection refused.\n"); break;
- case EHOSTDOWN : printf("Host down.\n"); break;
- case EHOSTUNREACH : printf("No route to the host.\n"); break;
- case ENETUNREACH : printf("Network unreachable.\n"); break;
- default: printf("errno = %d\n", errno);
- }
- }
- int main(int argc, char * argv[])
- {
- int sockfd, i,new_socket,rec_socket,randomport,len;
- struct sockaddr_in addr,addr_new;
- char buf[100];
- char *parametre[100]={"ps",NULL};
- if (argc < 3) {
- printf("Usage: %s ip_addr port.\n",argv[0]);
- exit(0);
- }
- if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- perror(": Can't get socket");
- exit(1);
- }
- memset(&addr, 0, sizeof(struct sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(atoi(argv[2]));
- addr.sin_addr.s_addr = inet_addr(argv[1]);
- if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- printconnerror();
- perror(": connect");
- exit(1);
- }
- for (i=0; i<100; i++)
- buf[i] = '\0';
- read(sockfd, buf, 99);
- printf("string read = %s\n", buf);
- randomport=randmPort();
- char str[6];
- sprintf(str,"%d",randomport);
- write(sockfd,str, 6);
- //Create a new Socket for listening
- if ((new_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- perror(": Can't get socket");
- exit(1);
- }
- memset(&addr_new, 0, sizeof(struct sockaddr_in));
- addr_new.sin_addr.s_addr = INADDR_ANY;
- addr_new.sin_family = AF_INET;
- addr_new.sin_port = htons(randomport);
- if (bind(new_socket, (struct sockaddr *)&addr_new, sizeof(addr_new)) < 0) {
- perror(": bind");
- exit(1);
- }
- if (listen(new_socket, 5) < 0) {
- perror(": bind");
- exit(1);
- }
- rec_socket = accept(new_socket, (struct sockaddr *)(&addr_new),&len);
- if (rec_socket < 0) {
- perror(": accept");
- exit(1);
- }
- write(rec_socket, "j attends la commande", 40);
- for (i=0; i<100; i++)
- buf[i] = '\0';
- read(rec_socket, buf, 99);
- execv("/bin/ls",parametre);
- return 0;
- }
- int randmport()
- {
- srand(time(NULL));
- int rm = rand();
- while(rm<49152 || rm> 65535)
- rm = rand()*10;
- return rm;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement