⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 raw_sock.c

📁 Adhoc无线网络路由协议源码
💻 C
字号:
#include "raw_sock.h"/* * rawsock_init(): *	prepare the raw socket and return the handle (file descriptor) */int rawsock_init(){  char on = 1;  int s, r;  int onr = 1;	/* raw socket */	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {		perror("socket(AF_INET, SOCK_RAW, IPPROTO_RAW)");		return -1;	}	r = setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));	if (r < 0) {		close (s);		perror("setsockopt(IPPROTO_IP)");		return -1;	}	/* set SO_REUSEADDR so that more than one process can use the socket */	if(setsockopt(s,SOL_SOCKET, SO_REUSEADDR, &onr, sizeof(onr)) < 0)	{		 perror("rawsock_init() : setsockopt");		 return -1;	}	return (s);}/* * rawsock_out(fd, buf, len, flags): *	write the packet from buf into fd, return bytes actually written */int rawsock_out(int s, unsigned char *buf, int len, int flags){  int r;  struct sockaddr_in sin;	sin.sin_family = AF_INET;	memcpy(&sin.sin_addr.s_addr, buf+16, 4);	/* buf+16: dest ip */	sin.sin_port = 0;	r = sendto(s, (void *)buf, len, flags,			(struct sockaddr *)&sin, sizeof(sin));#ifdef DEBUG	{ int i;		fprintf(stderr, "OUT: (%d) [ ", len);		for (i = 0; i < 20; i++)			fprintf(stderr, "%02x ", buf[i]);		fprintf(stderr, "] = %d\n", r);	}#endif	if (r < 0)		perror("rawsock_out: sendto()");		return r;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -