gpt4 book ai didi

c++ - 读取原始套接字 ip header ? C++

转载 作者:行者123 更新时间:2023-11-28 07:22:03 24 4
gpt4 key购买 nike

我正在尝试使用原始套接字找出 IP 数据包包含的内容。我正在用 C++ 编写,到目前为止,我已经能够使用以下代码打印出整个数据包:

int CreateRawSocket(int protocol_to_sniff)
{
int s
if(s = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)
{
perror("Error creating raw socket");
exit(1);
}
return s;
}

void PrintPacket(unsigned char *packet, int len)
{
unsigned char *p = packet;

printf("\n--Packet start--\n");
while(len--)
{
printf("%.2x ", *p);
p++;
}
printf("\n--Packet end--\n");
}

int main()
{
int length, s, packets_to_sniff;
unsigned char *packet_buffer;

s = CreateRawSocket(ETH_P_ALL);

if(s == -1)
{
perror("Error creating socket");
exit(1);
}

packet_buffer = (unsigned char *)malloc(1518);

printf("Number of packets to sniff?: ");
cin >> packets_to_sniff;

while(packets_to_sniff--)
{
length = recvfrom(s, packet_buffer, ETH_FRAME_LEN, 0, NULL, NULL);
if(length == -1)
{
perror("Error recieving packet");
exit(1);
}
else
{
printf("Packet number: " + packets_to_sniff);
PrintPacket(packet_buffer, length);
}
}
}

我有一个虚拟机 ping 我正在编程的那个,我的所有程序似乎打印的是我认为是十六进制的数据包的 MAC 帧。

我希望能够读取 IP header 并找出 header 的哪些字段包含哪些信息。

有点像:

printf(packet_buffer[0]);
printf(packet_buffer[1]);

我试过了,但没有得到任何看起来很奇怪的输出。

此致!

最佳答案

因为您知道 IP header 的大小,您可以将每个字节打印为十六进制:

for (int i = 0; i < ip_header_length; i++)
printf("%02x ", packet_buffer[i]);

关于c++ - 读取原始套接字 ip header ? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298793/

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