ip-win32.c

来自「Ubuntu packages of security software。 相」· C语言 代码 · 共 81 行

C
81
字号
/* * ip-win32.c * * Copyright (c) 2002 Dug Song <dugsong@monkey.org> * * $Id: ip-win32.c,v 1.5 2005/01/25 21:30:40 dugsong Exp $ */#ifdef _WIN32
#include "dnet_winconfig.h"
#else
#include "config.h"
#endif#include <winsock2.h>#include <ws2tcpip.h>#include <errno.h>#include <stdlib.h>#include "dnet.h"struct ip_handle {	WSADATA			wsdata;	SOCKET			fd;	struct sockaddr_in	sin;};ip_t *ip_open(void){	BOOL on;	ip_t *ip;	if ((ip = calloc(1, sizeof(*ip))) != NULL) {		if (WSAStartup(MAKEWORD(2, 2), &ip->wsdata) != 0) {			free(ip);			return (NULL);		}		if ((ip->fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) ==		    INVALID_SOCKET)			return (ip_close(ip));				on = TRUE;		if (setsockopt(ip->fd, IPPROTO_IP, IP_HDRINCL,			(const char *)&on, sizeof(on)) == SOCKET_ERROR) {			SetLastError(ERROR_NETWORK_ACCESS_DENIED);			return (ip_close(ip));		}		ip->sin.sin_family = AF_INET;		ip->sin.sin_port = htons(666);	}	return (ip);}ssize_tip_send(ip_t *ip, const void *buf, size_t len){	struct ip_hdr *hdr = (struct ip_hdr *)buf;		ip->sin.sin_addr.s_addr = hdr->ip_src;		if ((len = sendto(ip->fd, (const char *)buf, (int) len, 0,	    (struct sockaddr *)&ip->sin, sizeof(ip->sin))) != SOCKET_ERROR)		return ((ssize_t) len);		return (-1);}ip_t *ip_close(ip_t *ip){	if (ip != NULL) {		WSACleanup();		if (ip->fd != INVALID_SOCKET)			closesocket(ip->fd);		free(ip);	}	return (NULL);}

⌨️ 快捷键说明

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