我在c中写了tcp syn portscan 当我发送tcp syn到一个存在的ip时,它运行良好 但是当我发送到不存在的ip时,函数sendto()<0不起作用,那是什么问题?
我在ubuntu18上使用代码块和gcc
这是代码的一部分
//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, 但是if(sendto()<0)不起作用,
答案 0 :(得分:0)
对于本地检测到的错误,您只会获得-1的返回值,一旦数据包在网络上发送出去,就将发送到它。
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);
}