Commit f9d6e8d4 authored by nanamicat's avatar nanamicat

fix

parent f65c6593
......@@ -30,11 +30,15 @@ void inbound(int raw, int tun) {
sockaddr_in address{.sin_family = AF_INET};
socklen_t address_length;
size_t packet_length;
while ((packet_length = recvfrom(raw, buffer, sizeof(buffer), 0, (sockaddr *) &address, &address_length)) >= 0) {
// std::cout << "received " << packet_length << " bytes from " << inet_ntoa(address.sin_addr) << std::endl;
while ((packet_length = recvfrom(raw, buffer, sizeof(buffer), 0, (sockaddr * ) & address, &address_length)) >= 0) {
auto *packet = (iphdr *) buffer;
auto overhead = packet->ihl * 4;
auto payload = buffer + overhead;
// auto inner = (iphdr *) payload;
// std::cout << "packet_length " << packet_length
// << " tot_len " << ntohs(packet->tot_len)
// << " inner->tot_len " << ntohs(inner->tot_len)
// << " from " << inet_ntoa(address.sin_addr) << std::endl;
auto payload_length = packet_length - overhead;
decrypt_package(payload, payload_length);
if (write(tun, payload, payload_length) < 0) {
......@@ -52,7 +56,7 @@ void outbound(int raw, int tun) {
size_t packet_length;
while ((packet_length = read(tun, buffer, sizeof(buffer))) >= 0) {
encrypt_package(buffer, packet_length);
if (sendto(raw, buffer, packet_length, 0, (sockaddr *) &address, sizeof(address)) < 0) {
if (sendto(raw, buffer, packet_length, 0, (sockaddr * ) & address, sizeof(address)) < 0) {
perror("outbound write");
}
}
......@@ -82,7 +86,7 @@ int main(int argc, char *argv[]) {
strncpy(ifr.ifr_name, args["dev"].as<std::string>().c_str(), IFNAMSIZ);
remote = inet_addr(args["IP"].as<std::string>().c_str());
auto raw = socket(AF_INET, SOCK_RAW, IPPROTO_IPIP);
auto raw = socket(AF_INET, SOCK_RAW, 144);
if (raw < 0) {
perror("socket init error");
return -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment