0
我正在實施一個聊天室應用程序,使用C語言的原始套接字用於我的大學項目。我在分配IP地址時遇到了問題。在IP頭中分配IP地址C
數據包從套接字接收。我正在解析它,如圖所示。現在如何分配IP地址。
我寧願按照所示的方式(如果可能,使用rcv_ip作爲字符)來完成它。所以在給出使用struct in_addr的建議之前,請幫助我解決這個問題。因爲我嘗試過其他方法,這些方法正在進一步給我造成困惑。
main()
{
char *rcv_ip;
char *packet;
int len;
struct iphdr ip_header;
rcv_ip=ParseIPHeader(packet,len);
printf("\n %s ",rcv_ip); //printing some junk
printf("\n %s ",inet_addr(rcv_ip)); //giving seg fault
printf("\n %s",inet_ntoa(*((struct in_addr*)ip_header->daddr))); //printing correct ip
ip_header CreateIPHeader(rcv_ip+5,rcv_ip);
}
現在是ParseIPHeader函數。
char *ParseIPHeader(packet,len)
{
struct iphdr *ip_header;
struct ethhdr *eth_header;
char *ret_ip;
ip_header=(struct iphdr *)(packet+sizeof(struct ethhdr));
ret_ip=malloc(10);
memset(ret_ip,0,10);
memcpy(ret_ip,&(ip_header->daddr),sizeof(ip_header->daddr));
memcpy(ret_ip+5,&(ip_header->saddr),4);
return ret_ip;
}
struct iphdr *CreateIPHeader(char *src_ip,char *dst_ip)
{
struct iphdr *ip_header;
ip_header=malloc(sizeof(struct iphdr));
//main part. How to do this??
ip_header->saddr = inet_addr(src_ip); //please correct it.
ip_header->daddr = inet_addr(dst_ip);
return(ip_header);
}
謝謝:)
是的..謝謝。這意味着我必須使用一些包含ipaddress的結構體。會**結構in_addr **沒問題?我想我需要這個結構的兩個對象,然後分配源IP和目標IP。但我將如何從** CreateIPHeader **函數返回兩個IP? – user3542109