Exemplo n.º 1
0
int main(int argc, char* argv)
{
    SOCKET s;
    struct protoent *pp;
    int rc;
    char icmpdg[1024];
    
    pp = getprotobyname("icmp");
    if (pp == NULL){
        printf("getprotobyname failed, errno %d.\n", errno);
        exit(errno);
    }
    
    s = socket(AF_INET, SOCK_RAW, pp->p_proto);
    if (!IS_VALID_SOCK(s)){
        printf("socket RAW failed, errno %d.\n", errno);
        exit(errno);
    }
    
    for(;;)
    {
        rc = recvfrom(s, icmpdg, sizeof(icmpdg), 0, NULL, NULL);
        if (rc < 0){
            printf("recvfrom failed, errno %d.\n", errno);
            exit(errno);
        }
        //printf("(%d bytes)%s\n", rc, icmpdg);
        print_dg(icmpdg, rc);
    }
    
    return 0;
}
inline SOCKET mksock()
{
	/*Initialize RAW socket UDP level*/
	SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

	/*setup some more settings for polling*/
	if(!IS_VALID_SOCK(sock))
		error(1, 0, "Error socket initialization");
	if(SetNonBlock(sock) < 0)
		error(1, errno, "Error switching socket to non-block mode.");
	if(SetReusable(sock) < 0)
		error(1, errno, "Error making socket reusable");

	return sock;
}