UDP 経由で送信されるパケットを作成しようとしています。ただし、受信側で正しいデータを取得できません。
パケットには、IP ヘッダー、UDP ヘッダー、および送信する必要があるデータを含めたいと考えています。この場合、ランダムなヘッダー情報とともに「Hello」という単語を送信したいだけです。
char *data = "Hello";
char *packet = (char *)malloc(sizeof(struct iphdr) + sizeof(struct udphdr) + strlen(data));
struct iphdr *ip = (struct iphdr*) packet;
struct udphdr *udp = (struct udphdr*) (packet + sizeof(struct iphdr));
char *send_buff = (char *) (packet + sizeof(struct iphdr) + sizeof(struct udphdr));
ip->saddr = inet_addr("1.2.3.4");
ip->daddr = inet_addr("5.6.7.8");
ip->ttl = 5;
udp->source = 5950;
udp->dest = 5950;
udp->len = sizeof(struct udphdr);
udp->check = 0;
strcpy(send_buff, data);
sendto(sock, packet, (sizeof(struct iphdr) + sizeof(struct udphdr) + strlen(data)), ROUTER_IP);
私が抱えている問題は、受信側がランダムなデータを取得するだけなので、バイト数がどこかで間違っていると想定しています。
受信側で、IP ヘッダーのフィールドの 1 つをテストとして出力するようにしましたが、正しくありません。
char recv_buff[1000];
int recv_bytes = recvfrom(sock, recv_buff, sizeof(recv_buff));
struct iphdr *ip = (struct iphdr*) recv_buff;
cout << static_cast<int16_t>(ip->ttl) << endl;
パケットを間違ってまとめているのでしょうか、それとも受信側に問題がありますか? この例http://www.winlab.rutgers.edu/~zhibinwu/html/c_prog.htmを参考にして、パケットをまとめました。