📄 net.c
字号:
/* * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> * Copyright (c) 1996-2000 Wichert Akkerman <wichert@cistron.nl> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $Id: net.c,v 1.23 2001/03/27 16:47:36 hughesj Exp $ */#include "defs.h"#include <sys/stat.h>#include <sys/socket.h>#include <sys/un.h>#if defined(HAVE_SIN6_SCOPE_ID_LINUX)#define in6_addr in6_addr_libc#define ipv6_mreq ipv6_mreq_libc#define sockaddr_in6 sockaddr_in6_libc#endif#include <netinet/in.h>#ifdef HAVE_NETINET_TCP_H#include <netinet/tcp.h>#endif#ifdef HAVE_NETINET_UDP_H#include <netinet/udp.h>#endif#include <arpa/inet.h>#include <net/if.h>#if defined(LINUX)#include <asm/types.h>#if defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC__ + __GLIBC_MINOR__ >= 3)# include <netipx/ipx.h>#else# include <linux/ipx.h>#endif#endif /* LINUX */#if defined (__GLIBC__) && (((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)) || defined(HAVE_SIN6_SCOPE_ID_LINUX))#if defined(HAVE_LINUX_IN6_H)#if defined(HAVE_SIN6_SCOPE_ID_LINUX)#undef in6_addr#undef ipv6_mreq#undef sockaddr_in6#define in6_addr in6_addr_kernel#define ipv6_mreq ipv6_mreq_kernel#define sockaddr_in6 sockaddr_in6_kernel#endif#include <linux/in6.h>#if defined(HAVE_SIN6_SCOPE_ID_LINUX)#undef in6_addr#undef ipv6_mreq#undef sockaddr_in6#define in6_addr in6_addr_libc#define ipv6_mreq ipv6_mreq_libc#define sockaddr_in6 sockaddr_in6_kernel#endif#endif#endif#if defined(HAVE_SYS_UIO_H)#include <sys/uio.h>#endif#if defined(HAVE_LINUX_NETLINK_H)#include <linux/netlink.h>#endif#if defined(HAVE_LINUX_IF_PACKET_H)#include <linux/if_packet.h>#endif#if defined(HAVE_LINUX_ICMP_H)#include <linux/icmp.h>#endif#ifndef PF_UNSPEC#define PF_UNSPEC AF_UNSPEC#endif#if UNIXWARE >= 7#define HAVE_SENDMSG 1 /* HACK - *FIXME* */#endif#ifdef LINUX/* Under Linux these are enums so we can't test for them with ifdef. */#define IPPROTO_EGP IPPROTO_EGP#define IPPROTO_PUP IPPROTO_PUP#define IPPROTO_IDP IPPROTO_IDP#define IPPROTO_IGMP IPPROTO_IGMP#define IPPROTO_RAW IPPROTO_RAW#define IPPROTO_MAX IPPROTO_MAX#endifstatic struct xlat domains[] = { { PF_UNSPEC, "PF_UNSPEC" }, { PF_UNIX, "PF_UNIX" }, { PF_INET, "PF_INET" },#ifdef PF_NETLINK { PF_NETLINK, "PF_NETLINK" },#endif#ifdef PF_PACKET { PF_PACKET, "PF_PACKET" },#endif#ifdef PF_INET6 { PF_INET6, "PF_INET6" },#endif#ifdef PF_ATMSVC { PF_ATMSVC, "PF_INET6" },#endif#ifdef PF_INET6 { PF_INET6, "PF_INET6" },#endif#ifdef PF_LOCAL { PF_LOCAL, "PS_LOCAL" },#endif#ifdef PF_ISO { PF_ISO, "PF_ISO" },#endif#ifdef PF_AX25 { PF_AX25, "PF_AX25" },#endif#ifdef PF_IPX { PF_IPX, "PF_IPX" },#endif#ifdef PF_APPLETALK { PF_APPLETALK, "PF_APPLETALK" },#endif#ifdef PF_NETROM { PF_NETROM, "PF_NETROM" },#endif#ifdef PF_BRIDGE { PF_BRIDGE, "PF_BRIDGE" },#endif#ifdef PF_AAL5 { PF_AAL5, "PF_AAL5" },#endif#ifdef PF_X25 { PF_X25, "PF_X25" },#endif#ifdef PF_ROSE { PF_ROSE, "PF_ROSE" },#endif#ifdef PF_DECNET { PF_DECNET, "PF_DECNET" },#endif#ifdef PF_NETBEUI { PF_NETBEUI, "PF_NETBEUI" },#endif#ifdef PF_IMPLINK { PF_IMPLINK, "PF_IMPLINK" },#endif { 0, NULL },};static struct xlat addrfams[] = { { AF_UNSPEC, "AF_UNSPEC" }, { AF_UNIX, "AF_UNIX" }, { AF_INET, "AF_INET" },#ifdef AF_INET6 { AF_INET6, "AF_INET6" },#endif { AF_DECnet, "AF_DECnet" },#ifdef PF_ATMSVC { AF_ATMSVC, "AF_ATMSVC" },#endif#ifdef AF_PACKET { AF_PACKET, "AF_PACKET" },#endif#ifdef AF_NETLINK { AF_NETLINK, "AF_NETLINK" },#endif#ifdef AF_ISO { AF_ISO, "AF_ISO" },#endif#ifdef AF_IMPLINK { AF_IMPLINK, "AF_IMPLINK" },#endif { 0, NULL },};static struct xlat socktypes[] = { { SOCK_STREAM, "SOCK_STREAM" }, { SOCK_DGRAM, "SOCK_DGRAM" },#ifdef SOCK_RAW { SOCK_RAW, "SOCK_RAW" },#endif#ifdef SOCK_SEQPACKET { SOCK_SEQPACKET,"SOCK_SEQPACKET"},#endif#ifdef SOCK_RDM { SOCK_RDM, "SOCK_RDM" },#endif#ifdef SOCK_PACKET { SOCK_PACKET, "SOCK_PACKET" },#endif { 0, NULL },};static struct xlat socketlayers[] = {#if defined(SOL_IP) { SOL_IP, "SOL_IP" },#endif#if defined(SOL_ICMP) { SOL_ICMP, "SOL_ICMP" },#endif#if defined(SOL_TCP) { SOL_TCP, "SOL_TCP" },#endif#if defined(SOL_UDP) { SOL_UDP, "SOL_UDP" },#endif#if defined(SOL_IPV6) { SOL_IPV6, "SOL_IPV6" },#endif#if defined(SOL_ICMPV6) { SOL_ICMPV6, "SOL_ICMPV6" },#endif#if defined(SOL_RAW) { SOL_RAW, "SOL_RAW" },#endif#if defined(SOL_IPX) { SOL_IPX, "SOL_IPX" },#endif#if defined(SOL_IPX) { SOL_IPX, "SOL_IPX" },#endif#if defined(SOL_AX25) { SOL_AX25, "SOL_AX25" },#endif#if defined(SOL_ATALK) { SOL_ATALK, "SOL_ATALK" },#endif#if defined(SOL_NETROM) { SOL_NETROM, "SOL_NETROM" },#endif#if defined(SOL_ROSE) { SOL_ROSE, "SOL_ROSE" },#endif#if defined(SOL_DECNET) { SOL_DECNET, "SOL_DECNET" },#endif#if defined(SOL_X25) { SOL_X25, "SOL_X25" },#endif#if defined(SOL_PACKET) { SOL_PACKET, "SOL_PACKET" },#endif#if defined(SOL_ATM) { SOL_ATM, "SOL_ATM" },#endif#if defined(SOL_AAL) { SOL_AAL, "SOL_AAL" },#endif#if defined(SOL_IRDA) { SOL_IRDA, "SOL_IRDA" },#endif { SOL_SOCKET, "SOL_SOCKET" }, /* Never used! */};static struct xlat protocols[] = { { IPPROTO_IP, "IPPROTO_IP" }, { IPPROTO_ICMP, "IPPROTO_ICMP" }, { IPPROTO_TCP, "IPPROTO_TCP" }, { IPPROTO_UDP, "IPPROTO_UDP" },#ifdef IPPROTO_GGP { IPPROTO_GGP, "IPPROTO_GGP" },#endif#ifdef IPPROTO_EGP { IPPROTO_EGP, "IPPROTO_EGP" },#endif#ifdef IPPROTO_PUP { IPPROTO_PUP, "IPPROTO_PUP" },#endif#ifdef IPPROTO_IDP { IPPROTO_IDP, "IPPROTO_IDP" },#endif#ifdef IPPROTO_IPV6 { IPPROTO_IPV6, "IPPROTO_IPV6" },#endif#ifdef IPPROTO_ICMPV6 { IPPROTO_ICMPV6,"IPPROTO_ICMPV6"},#endif#ifdef IPPROTO_IGMP { IPPROTO_IGMP, "IPPROTO_IGMP" },#endif#ifdef IPPROTO_HELLO { IPPROTO_HELLO,"IPPROTO_HELLO" },#endif#ifdef IPPROTO_ND { IPPROTO_ND, "IPPROTO_ND" },#endif#ifdef IPPROTO_RAW { IPPROTO_RAW, "IPPROTO_RAW" },#endif#ifdef IPPROTO_MAX { IPPROTO_MAX, "IPPROTO_MAX" },#endif#ifdef IPPROTO_IPIP { IPPROTO_IPIP, "IPPROTO_IPIP" },#endif { 0, NULL },};static struct xlat msg_flags[] = { { MSG_OOB, "MSG_OOB" },#ifdef MSG_DONTROUTE { MSG_DONTROUTE,"MSG_DONTROUTE" },#endif#ifdef MSG_PEEK { MSG_PEEK, "MSG_PEEK" },#endif#ifdef MSG_CTRUNC { MSG_CTRUNC, "MSG_CTRUNC" },#endif#ifdef MSG_PROXY { MSG_PROXY, "MSG_PROXY" },#endif#ifdef MSG_EOR { MSG_EOR, "MSG_EOR" },#endif#ifdef MSG_WAITALL { MSG_WAITALL, "MSG_WAITALL" },#endif#ifdef MSG_TRUNC { MSG_TRUNC, "MSG_TRUNC" },#endif#ifdef MSG_CTRUNC { MSG_CTRUNC, "MSG_CTRUNC" },#endif#ifdef MSG_ERRQUEUE { MSG_ERRQUEUE, "MSG_ERRQUEUE" },#endif#ifdef MSG_DONTWAIT { MSG_DONTWAIT, "MSG_DONTWAIT" },#endif#ifdef MSG_CONFIRM { MSG_CONFIRM, "MSG_CONFIRM" },#endif#ifdef MSG_PROBE { MSG_PROBE, "MSG_PROBE" },#endif { 0, NULL },};static struct xlat sockoptions[] = {#ifdef SO_PEERCRED { SO_PEERCRED, "SO_PEERCRED" },#endif#ifdef SO_PASSCRED { SO_PASSCRED, "SO_PASSCRED" },#endif#ifdef SO_DEBUG { SO_DEBUG, "SO_DEBUG" },#endif#ifdef SO_REUSEADDR { SO_REUSEADDR, "SO_REUSEADDR" },#endif#ifdef SO_KEEPALIVE { SO_KEEPALIVE, "SO_KEEPALIVE" },#endif#ifdef SO_DONTROUTE { SO_DONTROUTE, "SO_DONTROUTE" },#endif#ifdef SO_BROADCAST { SO_BROADCAST, "SO_BROADCAST" },#endif#ifdef SO_LINGER { SO_LINGER, "SO_LINGER" },#endif#ifdef SO_OOBINLINE { SO_OOBINLINE, "SO_OOBINLINE" },#endif#ifdef SO_TYPE { SO_TYPE, "SO_TYPE" },#endif#ifdef SO_ERROR { SO_ERROR, "SO_ERROR" },#endif#ifdef SO_SNDBUF { SO_SNDBUF, "SO_SNDBUF" },#endif#ifdef SO_RCVBUF { SO_RCVBUF, "SO_RCVBUF" },#endif#ifdef SO_NO_CHECK { SO_NO_CHECK, "SO_NO_CHECK" },#endif#ifdef SO_PRIORITY { SO_PRIORITY, "SO_PRIORITY" },#endif#ifdef SO_ACCEPTCONN { SO_ACCEPTCONN,"SO_ACCEPTCONN" },#endif#ifdef SO_USELOOPBACK { SO_USELOOPBACK,"SO_USELOOPBACK"},#endif#ifdef SO_SNDLOWAT { SO_SNDLOWAT, "SO_SNDLOWAT" },#endif#ifdef SO_RCVLOWAT { SO_RCVLOWAT, "SO_RCVLOWAT" },#endif#ifdef SO_SNDTIMEO { SO_SNDTIMEO, "SO_SNDTIMEO" },#endif#ifdef SO_RCVTIMEO { SO_RCVTIMEO, "SO_RCVTIMEO" },#endif#ifdef SO_BSDCOMPAT { SO_BSDCOMPAT, "SO_BSDCOMPAT" },#endif#ifdef SO_REUSEPORT { SO_REUSEPORT, "SO_REUSEPORT" },#endif#ifdef SO_RCVLOWAT { SO_RCVLOWAT, "SO_RCVLOWAT" },#endif#ifdef SO_SNDLOWAT { SO_SNDLOWAT, "SO_SNDLOWAT" },#endif#ifdef SO_RCVTIMEO { SO_RCVTIMEO, "SO_RCVTIMEO" },#endif#ifdef SO_SNDTIMEO { SO_SNDTIMEO, "SO_SNDTIMEO" },#endif { 0, NULL },};#ifdef SOL_IPstatic struct xlat sockipoptions[] = { { IP_TOS, "IP_TOS" }, { IP_TTL, "IP_TTL" },#if defined(IP_HDRINCL) { IP_HDRINCL, "IP_HDRINCL" },#endif#if defined(IP_OPTIONS) { IP_OPTIONS, "IP_OPTIONS" },#endif { IP_ROUTER_ALERT, "IP_ROUTER_ALERT" },#if defined(IP_RECVOPTIONS) { IP_RECVOPTIONS, "IP_RECVOPTIONS" },#endif { IP_RETOPTS, "IP_RETOPTS" }, { IP_PKTINFO, "IP_PKTINFO" }, { IP_PKTOPTIONS, "IP_PKTOPTIONS" }, { IP_MTU_DISCOVER, "IP_MTU_DISCOVER" }, { IP_MTU_DISCOVER, "IP_MTU_DISCOVER" }, { IP_RECVERR, "IP_RECVERR" }, { IP_RECVTTL, "IP_RECRECVTTL" }, { IP_RECVTOS, "IP_RECRECVTOS" },#if defined(IP_MTU) { IP_MTU, "IP_MTU" },#endif { IP_MULTICAST_IF, "IP_MULTICAST_IF" }, { IP_MULTICAST_TTL, "IP_MULTICAST_TTL" }, { IP_MULTICAST_LOOP, "IP_MULTICAST_LOOP" }, { IP_ADD_MEMBERSHIP, "IP_ADD_MEMBERSHIP" }, { IP_DROP_MEMBERSHIP, "IP_DROP_MEMBERSHIP" }, { 0, NULL },};#endif /* SOL_IP */#ifdef SOL_IPXstatic struct xlat sockipxoptions[] = { { IPX_TYPE, "IPX_TYPE" }, { 0, NULL },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -