Example #1
0
void do_ip(void *p)
{
	struct iphdr *ip = p;

	g.packet_ip++;

	if(g.print_flag_ip)
		print_ip(ip);

	void *data = ip;

	data += ip->ihl << 2;

	switch(ip->protocol)
	{
		case IPPROTO_TCP:
			do_tcp(data);
			break;
		case IPPROTO_UDP:
			do_udp(data);
			break;
		case IPPROTO_ICMP:
			do_icmp(data);
			break;
		case IPPROTO_IGMP:
			do_igmp(data);
			break;
	}
}
Example #2
0
void do_ip( char * data )
{
	global.packet_ip ++;

	struct iphdr *pip;         
	pip = ( struct iphdr * ) data;    /* pip = point to ip layer */
	if( global.print_flag_ip )
		print_ip( pip );
	
	char * pdata = data + pip->ihl * 4;
	
	switch( pip->protocol ){
		case IPPROTO_ICMP:
			do_icmp( pdata );
			break;
		case IPPROTO_IGMP:
			do_igmp( pdata );
			break;
		case IPPROTO_TCP:
			do_tcp( pdata );
			break;
		case IPPROTO_UDP:
			do_udp( pdata );
			break;
		default:
			printf("IP: 未知其上层协议.\n");
			break;
	}
}