#include #include #include #include #include #include #include #include void err(char*buf) { printf("%s\n", buf); _exit(1); } #define add2buf(a) {int q=strlen(a); memcpy(&buf[i],&a[0],q+1); i+=q+1;} int main(int argc, char **argv) { if (argc < 6) err("using: re [cmd]"); int port = atoi(argv[2]); struct sockaddr_in addr; memset(&addr, 0, sizeof (addr)); if (inet_aton(argv[1], &addr.sin_addr) == 0) err("bad addr address"); addr.sin_family = AF_INET; addr.sin_port = htons(port); printf("connecting %s %i.\n", inet_ntoa(addr.sin_addr), port); int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) err("unable to open socket"); if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) err("failed to connect socket"); unsigned char buf[4096]; int i = 1; buf[0]=0; add2buf(argv[3]); add2buf(argv[4]); printf("running"); for (int o=5; o