当我想在 MacOS 中实现 PPTP 客户端时,我的电脑中的 PPTP 服务器无法接收到封装在 GRE 包中的 LCP 包,操作系统是 Catalina 10.15.2。
这是我用 C 编写的代码。
int ppp_fd;
if ((ppp_fd = socket(AF_INET, SOCK_RAW, IPPROTO_GRE)) <= 0)
{
perror("[Error] Create a new socket failed");
return;
}
struct sockaddr_in recv;
recv.sin_addr.s_addr = htonl(INADDR_ANY);
recv.sin_port = 0;
recv.sin_family = AF_INET;
char buffer[BUFSIZ];
int ret;
int addr_len = sizeof(recv);
if((ret = recvfrom(ppp_fd, buffer, BUFSIZ, 0, (struct sockaddr *)&recv, (socklen_t *)&addr_len)) < 0)
{
perror("[ERROR] Receive data failed");
return;
}
printf("ret: %d\n", ret);
Wireshark 可以正确捕获配置请求,但是代码似乎被阻塞并且什么也没打印。