c - 在C语言中解析原始套接字编程中的IP地址

标签 c linux sockets ip-address

我正在 C linux 中实现原始套接字。我是套接字编程新手,因此对用于 Internet 地址的数据类型有一些问题。

我想知道下面的代码中 ip_addres(in main) 的数据类型应该是什么。我认为它需要是指针,因为我需要返回两个地址。然后这两个地址将被传递到下一个函数中,如下所示。

main()
{
       int len,raw_socket;
       struct iphdr *ip_header;
       unsigned char *packet_buffer[2048];
       len=recvfrom(raw_socket,packet_buffer,2048,...);

       ip_addres=parseipheader(packet_buffer,len); /*I want this function to return ip address of destination and source*/
       ip_header=CreateIPHeader(source_ip,destination_ip);
}

parseipheader(unsigned char *packet,int len)
{
       struct iphdr *ip_header;
       ip_header=(struct ip_header *)(packet+sizeof(struct ethhdr));
       return ip_addresses;
}
struct iphdr* CreateIPHeader(source_ip,destination_ip)
{
       struct iphdr *ip_header;

       return ip_header;
}

最佳答案

是的,你是对的。您可以返回指向源 IP 地址的指针,目标 IP 地址是 ip header 中源 IP 地址的 4 个字节(32 位)。所以你可以在源ip地址的基础上加上4来得到目的ip地址。

char *src_ip;

src_ip = parseipheader(packet_buffer,len);

CreateIPHeader(src_ip,src_ip+4);

关于c - 在C语言中解析原始套接字编程中的IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130371/

相关文章:

python - 为什么 SSLSocket,套接字的子类型,缺少 create_connection 方法?

c# - 通过套接字作为HTTP服务器正确接收请求数据

c - 如何使用 Visual Studio 2008 重新初始化静态 C 库中的所有全局变量?

c - C 中的文件扩展名作为用户输入

linux - 如何从包含特定字符串模式的行中提取第一个参数

java - 使用 Linux 终端在 java 中打开 PDF

c - malloc_usable_size() 返回错误的大小

c - 动态库gcc编译错误

linux - 在远程 Linux 服务器上运行 ANT 命令

java - Socket同时读写