gpt4 book ai didi

c - 我向不存在的IP发送tcp syn数据包,但没有得到响应

转载 作者:行者123 更新时间:2023-11-30 19:28:17 25 4
gpt4 key购买 nike

我用c写tcp syn portscan当我将 tcp syn 发送到现有 ip 时,效果很好但是当我发送到一个不存在的ip时,函数sendto()<0不起作用,问题出在哪里?

我在 ubuntu18 上使用 codeblocks 和 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) 不起作用,

最佳答案

对于本地检测到的错误,您只会得到 -1 返回值,一旦数据包传到网络上,sendto 就会处理它。

man sendto

No indication of failure to deliver is implicit in a send(). Locally detected errors are indicated by a return value of -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);
}

关于c - 我向不存在的IP发送tcp syn数据包,但没有得到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54247149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com