Networking 在握手过程的第三步中用RST代替ACK

Networking 在握手过程的第三步中用RST代替ACK,networking,tcp,raw-sockets,Networking,Tcp,Raw Sockets,我编写了在Ubuntu上运行的模拟握手过程的c/c++代码 //Create a raw socket int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP); //some address resolution strcpy(source_ip , "192.168.1.9"); sin.sin_family = AF_INET; sin.sin_port = htons(1235); sin.sin_addr.s_addr = inet_addr ("

我编写了在Ubuntu上运行的模拟握手过程的c/c++代码

//Create a raw socket
int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);
//some address resolution
strcpy(source_ip , "192.168.1.9");
sin.sin_family = AF_INET;
sin.sin_port = htons(1235);
sin.sin_addr.s_addr = inet_addr ("192.168.1.6");



if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0)
{
    perror("Error setting IP_HDRINCL");
    exit(0);
}



 {
    //Send the packet
    if (sendto (s, datagram, iph->tot_len ,  0, (struct sockaddr *) &sin, sizeof (sin)) < 0)
    {
        perror("sendto failed");
    }
    //Data send successfully
    else
    {
        printf ("Packet Send. Length : %d \n" , iph->tot_len);
    }
}

int l;
if( recvfrom(s,buffer,4096,0, (struct sockaddr *) &sin, &l)<0)
{
    perror("sendto failed");
}
//Data send successfully
else
{
    printf ("Packet recv. ");
}
printf ("Enter number to end: ");


int numm=getchar();
close(s);
return 0;
//创建原始套接字
int s=插座(PF_INET、SOCK_RAW、IPPROTO_TCP);
//一些地址解析
strcpy(来源ip,“192.168.1.9”);
sin.sin_family=AF_INET;
sin.sin_port=htons(1235);
sin.sin_addr.s_addr=inet_addr(“192.168.1.6”);
如果(设置锁定选项(s、IPPROTO_IP、IP_HDRINCL、val、尺寸(一个))<0)
{
perror(“错误设置IP_HDRINCL”);
出口(0);
}
{
//发送数据包
if(发送到(s,数据报,iph->tot_len,0,(struct sockaddr*)和sin,sizeof(sin))<0)
{
perror(“发送失败”);
}
//数据发送成功
其他的
{
printf(“数据包发送。长度:%d\n”,iph->tot_len);
}
}
int l;

如果(recvfrom(s,buffer,4096,0,(struct sockaddr*)&sin,&l)在使用原始套接字时,您的操作系统不知道存在连接,因为您基本上实现了自己的TCP/IP堆栈并绕过了操作系统

您的操作系统看到一个未经请求的数据包,并用
RST
响应,以指示对使用原始套接字发送的数据包做出响应的远程系统的主动拒绝


要绕过它,请使用一个IP地址,该IP地址路由到您所在的子网,但在机器上使用原始套接字分配的是而不是,这样操作系统就不会响应,然后从它进行传输,并以某种“混杂模式”侦听响应你的网卡应该支持观察不属于它的数据包,这样你就可以监控适当路由的流量。< /p> @ MeeRa,如果这解决了你的问题,或者你认为这是一个满意的答案,那么请把它标记为这样。