Ejemplo n.º 1
0
Generator::Generator(const char *src, const char *dst) {
 
	sockraw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
	 
	socket_broadcast(sockraw);
	/* set SO_IPHDRINCL option */
	socket_iphdrincl(sockraw);

 
	src_addr.sin_family = AF_INET;
	src_addr.sin_addr.s_addr = inet_addr(src);
	src_addr.sin_port = htons(9095);
	memset(&src_addr.sin_zero, '\0', 8);
 
	dest_addr.sin_family = AF_INET;
	dest_addr.sin_addr.s_addr = inet_addr(dst);
	dest_addr.sin_port = htons(9095);
	memset(&dest_addr.sin_zero, '\0', 8);
   /* 
	if(bind(sockraw, (struct sockaddr *)&src_addr, sizeof(struct sockaddr)) == -1) {
		perror("bind");
		//return -1;
	}
*/
	//return 0;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
	if (argc != 2)
	{
		printf("Usage: %s PORT\n", argv[0]);
		exit(1);
	}
	int sock_udp = socket(AF_INET, SOCK_DGRAM, 0);
	if (sock_udp == -1) {
		perror("socket");
		exit(1);
	}
	int sock_raw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
	if (sock_raw == -1) {
		perror("socket");
		exit(1);
	}
	socket_iphdrincl(sock_raw);

	struct sockaddr_in local = {0};
	local.sin_family=AF_INET;
	local.sin_port=htons(atoi(argv[1])); 
	local.sin_addr.s_addr=INADDR_ANY;

	bind(sock_udp,(struct sockaddr*)&local,sizeof(local));

	struct sockaddr_in sa = {0};
	sa.sin_family = AF_INET;

	int total = 0;
	while (1) {
		unsigned char buf[2048];
		int len = recv(sock_udp, buf, sizeof(buf), 0);
		printf("forward packet, size = %d, total = %d KB\n", len, (total += len) / 1024);
		int i;
		for (i=0; i<len; i++)
			buf[i] ^= 0x5a;
		sa.sin_addr.s_addr = *(unsigned int *)&buf[16];
		sendto(sock_raw, buf, len, 0, (struct sockaddr*)&sa, sizeof(sa));
	}
	return 0;
}