/
githubmirror
/
nmap
Обзор
Документация
Войти
/
githubmirror
/
nmap
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
libdnet-stripped/src/ip-win32.c
75 строк
1 KB
dmiller
Windows build fixes for libdnet-stripped
11 апр 2025, 19:39
11 апр 2025, 19:39
21e5cc6
Код
Авторство
О чём код?
/* * ip-win32.c * * Copyright (c) 2002 Dug Song <dugsong@monkey.org> * * $Id$ */ #include "dnet_winconfig.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_t ip_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, len, 0, (struct sockaddr *)&ip->sin, sizeof(ip->sin))) != SOCKET_ERROR) return (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); }