Я отправляю пакет синхронизации tcp на Ip, который не существует ,, но не получает ответ - PullRequest
0 голосов
/ 18 января 2019

пишу tcp syn portscan в c Когда я отправляю TCP Syn на существующий IP, он работает хорошо Но когда я отправляю на ip, который не существует, функция sendto () <0 не работает, что за проблемы? </p>

Я использую кодовые блоки и gcc на ubuntu18

Это часть кода

//Create a raw socket
  int s = socket (AF_INET, SOCK_RAW, IPPROTO_TCP);

//IP_HDRINCL to tell the kernel that headers are included in the packet
  int one = 1;
  const int *val = &one;
  setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one);

// send syn packet
   if ( sendto (s, datagram, sizeof(struct iphdr) + sizeof(struct tcphdr), 0, (struct sockaddr *) &dest, sizeof (dest)) < 0){
  {
            printf ("Error sending syn packet. Error number : %d . Error message : %s \n",errno, strerror(errno));
            exit(0);
        }}

Когда я отлаживаю, чтобы увидеть возврат sendto (), это -1 , но если (sendto () <0) не работает, </p>

1 Ответ

0 голосов
/ 18 января 2019

Возвращаемое значение -1 выдается только для локально обнаруженных ошибок, как только пакет выходит в сеть, sendto завершает работу с ним.

man sendto

Никаких указаний на невозможность доставки неявно указано в send (). в местном масштабе обнаруженные ошибки обозначаются возвращаемым значением -1.

// send syn packet
size_t ret_code = sendto (s,datagram, 
                         sizeof(struct iphdr) + sizeof(struct tcphdr),
                         0,(struct sockaddr *) &dest, sizeof (dest)) ;
// ret_code will be length if successful, else -1      

if ( ret_code ==-1){
        // If packet successfully sent out on interface but dropped by router along path, this is not triggered.
        printf ("Error sending syn packet. Error number : %d . Error message : %s \n",errno, strerror(errno));
        exit(0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...