gpt4 book ai didi

tcp - 原始 tcp 发送和接收

转载 作者:可可西里 更新时间:2023-11-01 02:54:30 29 4
gpt4 key购买 nike

我正在制作一个应用程序,使用原始套接字并需要您的建议:

该应用程序是某种 tcp/ip 堆栈的测试器。我需要什么 我有一个与远程服务器连接并将一些数据传输到 id 的应用程序。可以说 - 我无法从我的应用程序打开套接字 - 我所拥有的只是带有所有 header 等的 tcp/Ip 缓冲区。

为了测试,我想制作 2 个原始套接字 - 1 个用于发送,1 个用于接收 ip 缓冲区。

为了接收我有这个代码:

int saddr_size , data_size;
struct sockaddr saddr;


unsigned char *buffer = (unsigned char *)malloc(65536); //Its Big!

printf("Starting...\n");
//Create a raw socket that shall sniff
sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_TCP);
if(sock_raw < 0)
{
printf("Socket Error\n");
return 1;
}
while(1)
{
saddr_size = sizeof saddr;
//Receive a packet
data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size);
if(data_size <0 )
{
printf("Recvfrom error , failed to get packets\n");
return 1;
}
printf("Data size = %d", data_size);

}
close(sock_raw);
printf("Finished");
return 0;

正如我所见,它可以正常工作 - 它获取所有 TCP/IP 数据包。

对于发件人我试过了

  static const unsigned char pkt6[60] = {
0x32, 0x04, 0x34, 0xed, 0xf3, 0xab, 0x01, 0x02, /* 2.4..... */
0x03, 0x04, 0x05, 0x06, 0x08, 0x00, 0x45, 0x00, /* ......E. */
0x00, 0x2e, 0x00, 0x02, 0x00, 0x00, 0xff, 0x06, /* ........ */
0x44, 0xc5, 0xc0, 0xa8, 0x01, 0x02, 0xac, 0x11, /* D....... */
0x09, 0x47, 0x00, 0x08, 0x1a, 0x0b, 0x00, 0x00, /* .G...... */
0x19, 0x6e, 0x23, 0x17, 0xc8, 0x36, 0x50, 0x18, /* .n#..6P. */
0x08, 0x60, 0x2b, 0xb9, 0x00, 0x00, 0x6c, 0x6f, /* .`+...lo */
0x6f, 0x6c, 0x0a, 0x00 /* ol.. */
};

if((s = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) {
perror("error:");
exit(EXIT_FAILURE);
}


while(1) {
if(send(s, pkt6, sizeof(pkt6), 0)< 0)
perror("error::");
}
}

它总是说

error:: Destination address required

那么,如果我想发送 READy IP 数据包并获取原始 ip 数据包,我需要更改什么?

最佳答案

我自己并没有以这种方式使用原始套接字,但您可能需要使用 AIUI sendto()而不是 send() , 并传递 saddr您在 recvfrom() 中获得的结构打电话。

关于tcp - 原始 tcp 发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24981693/

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