332 lines
10 KiB
C
332 lines
10 KiB
C
//
|
|
// License:
|
|
// https://github.com/rapid7/metasploit-framework/blob/master/LICENSE
|
|
//
|
|
|
|
#define IPPROTO_IP 0
|
|
#define IPPROTO_ICMP 1
|
|
#define IPPROTO_IGMP 2
|
|
#define IPPROTO_GGP 3
|
|
#define IPPROTO_TCP 6
|
|
#define IPPROTO_PUP 12
|
|
#define IPPROTO_UDP 17
|
|
#define IPPROTO_IDP 22
|
|
#define IPPROTO_ND 77
|
|
#define IPPROTO_RAW 255
|
|
#define IPPROTO_MAX 256
|
|
#define IPPORT_ECHO 7
|
|
#define IPPORT_DISCARD 9
|
|
#define IPPORT_SYSTAT 11
|
|
#define IPPORT_DAYTIME 13
|
|
#define IPPORT_NETSTAT 15
|
|
#define IPPORT_FTP 21
|
|
#define IPPORT_TELNET 23
|
|
#define IPPORT_SMTP 25
|
|
#define IPPORT_TIMESERVER 37
|
|
#define IPPORT_NAMESERVER 42
|
|
#define IPPORT_WHOIS 43
|
|
#define IPPORT_MTP 57
|
|
#define IPPORT_TFTP 69
|
|
#define IPPORT_RJE 77
|
|
#define IPPORT_FINGER 79
|
|
#define IPPORT_TTYLINK 87
|
|
#define IPPORT_SUPDUP 95
|
|
#define IPPORT_EXECSERVER 512
|
|
#define IPPORT_LOGINSERVER 513
|
|
#define IPPORT_CMDSERVER 514
|
|
#define IPPORT_EFSSERVER 520
|
|
#define IPPORT_BIFFUDP 512
|
|
#define IPPORT_WHOSERVER 513
|
|
#define IPPORT_ROUTESERVER 520
|
|
#define IPPORT_RESERVED 1024
|
|
#define IMPLINK_IP 155
|
|
#define IMPLINK_LOWEXPER 156
|
|
#define IMPLINK_HIGHEXPER 158
|
|
#define WSADESCRIPTION_LEN 256
|
|
#define WSASYS_STATUS_LEN 128
|
|
#define SD_RECEIVE 0x00
|
|
#define SD_SEND 0x01
|
|
#define SD_BOTH 0x02
|
|
#define FD_SETSIZE 64
|
|
#define WSA_INVALID_HANDLE 6
|
|
#define WSA_NOT_ENOUGH_MEMORY 8
|
|
#define WSA_INVALID_PARAMETER 87
|
|
#define WSA_OPERATION_ABORTED 995
|
|
#define WSA_IO_INCOMPLETE 996
|
|
#define WSA_IO_PENDING 997
|
|
#define WSAEINTR 10004
|
|
#define WSAEBADF 10009
|
|
#define WSAEACCES 10013
|
|
#define WSAEFAULT 10014
|
|
#define WSAEINVAL 10022
|
|
#define WSAEMFILE 10024
|
|
#define WSAEWOULDBLOCK 10035
|
|
#define WSAEINPROGRESS 10036
|
|
#define WSAEALREADY 10037
|
|
#define WSAENOTSOCK 10038
|
|
#define WSAEDESTADDRREQ 10039
|
|
#define WSAEMSGSIZE 10040
|
|
#define WSAEPROTOTYPE 10041
|
|
#define WSAENOPROTOOPT 10042
|
|
#define WSAEPROTONOSUPPORT 10043
|
|
#define WSAESOCKTNOSUPPORT 10044
|
|
#define WSAEOPNOTSUPP 10045
|
|
#define WSAEPFNOSUPPORT 10046
|
|
#define WSAEAFNOSUPPORT 10047
|
|
#define WSAEADDRINUSE 10048
|
|
#define WSAEADDRNOTAVAIL 10049
|
|
#define WSAENETDOWN 10050
|
|
#define WSAENETUNREACH 10051
|
|
#define WSAENETRESET 10052
|
|
#define WSAECONNABORTED 10053
|
|
#define WSAECONNRESET 10054
|
|
#define WSAENOBUFS 10055
|
|
#define WSAEISCONN 10056
|
|
#define WSAENOTCONN 10057
|
|
#define WSAESHUTDOWN 10058
|
|
#define WSAETOOMANYREFS 10059
|
|
#define WSAETIMEDOUT 10060
|
|
#define WSAECONNREFUSED 10061
|
|
#define WSAELOOP 10062
|
|
#define WSAENAMETOOLONG 10063
|
|
#define WSAEHOSTDOWN 10064
|
|
#define WSAEHOSTUNREACH 10065
|
|
#define WSAENOTEMPTY 10066
|
|
#define WSAEPROCLIM 10067
|
|
#define WSAEUSERS 10068
|
|
#define WSAEDQUOT 10069
|
|
#define WSAESTALE 10070
|
|
#define WSAEREMOTE 10071
|
|
#define WSASYSNOTREADY 10091
|
|
#define WSAVERNOTSUPPORTED 10092
|
|
#define WSANOTINITIALISED 10093
|
|
#define WSAEDISCON 10101
|
|
#define WSAENOMORE 10102
|
|
#define WSAECANCELLED 10103
|
|
#define WSAEINVALIDPROCTABLE 10104
|
|
#define WSAEINVALIDPROVIDER 10105
|
|
#define WSAEPROVIDERFAILEDINIT 10106
|
|
#define WSASYSCALLFAILURE 10107
|
|
#define WSASERVICE_NOT_FOUND 10108
|
|
#define WSATYPE_NOT_FOUND 10109
|
|
#define WSA_E_NO_MORE 10110
|
|
#define WSA_E_CANCELLED 10111
|
|
#define WSAEREFUSED 10112
|
|
#define WSAHOST_NOT_FOUND 11001
|
|
#define WSATRY_AGAIN 11002
|
|
#define WSANO_RECOVERY 11003
|
|
#define WSANO_DATA 11004
|
|
#define WSA_QOS_RECEIVERS 11005
|
|
#define WSA_QOS_SENDERS 11006
|
|
#define WSA_QOS_NO_SENDERS 11007
|
|
#define WSA_QOS_NO_RECEIVERS 11008
|
|
#define WSA_QOS_REQUEST_CONFIRMED 11009
|
|
#define WSA_QOS_ADMISSION_FAILURE 11010
|
|
#define WSA_QOS_POLICY_FAILURE 11011
|
|
#define WSA_QOS_BAD_STYLE 11012
|
|
#define WSA_QOS_BAD_OBJECT 11013
|
|
#define WSA_QOS_TRAFFIC_CTRL_ERROR 11014
|
|
#define WSA_QOS_GENERIC_ERROR 11015
|
|
#define WSA_QOS_ESERVICETYPE 11016
|
|
#define WSA_QOS_EFLOWSPEC 11017
|
|
#define WSA_QOS_EPROVSPECBUF 11018
|
|
#define WSA_QOS_EFILTERSTYLE 11019
|
|
#define WSA_QOS_EFILTERTYPE 11020
|
|
#define WSA_QOS_EFILTERCOUNT 11021
|
|
#define WSA_QOS_EOBJLENGTH 11022
|
|
#define WSA_QOS_EFLOWCOUNT 11023
|
|
#define WSA_QOS_EUNKOWNPSOBJ 11024
|
|
#define WSA_QOS_EPOLICYOBJ 11025
|
|
#define WSA_QOS_EFLOWDESC 11026
|
|
#define WSA_QOS_EPSFLOWSPEC 11027
|
|
#define WSA_QOS_EPSFILTERSPEC 11028
|
|
#define WSA_QOS_ESDMODEOBJ 11029
|
|
#define WSA_QOS_ESHAPERATEOBJ 11030
|
|
#define WSA_QOS_RESERVED_PETYPE 11031
|
|
#define AF_UNSPEC 0
|
|
#define AF_INET 2
|
|
#define AF_IPX 6
|
|
#define AF_APPLETALK 16
|
|
#define AF_NETBIOS 17
|
|
#define AF_INET6 23
|
|
#define AF_IRDA 26
|
|
#define AF_BTH 32
|
|
#define SOCK_STREAM 1
|
|
#define SOCK_DGRAM 2
|
|
#define SOCK_RAW 3
|
|
#define SOCK_RDM 4
|
|
#define SOCK_SEQPACKET 5
|
|
#define INVALID_SOCKET (SOCKET)(~0)
|
|
#define SOCKET_ERROR (-1)
|
|
#define AI_PASSIVE 0x00000001
|
|
#define AI_CANONNAME 0x00000002
|
|
#define AI_NUMERICHOST 0x00000004
|
|
#define AI_NUMERICSERV 0x00000008
|
|
#define AI_ALL 0x00000100
|
|
#define AI_ADDRCONFIG 0x00000400
|
|
#define AI_V4MAPPED 0x00000800
|
|
#define AI_NON_AUTHORITATIVE 0x00004000
|
|
#define AI_SECURE 0x00008000
|
|
#define AI_RETURN_PREFERRED_NAMES 0x00010000
|
|
#define AI_FQDN 0x00020000
|
|
#define AI_FILESERVER 0x00040000
|
|
#define MAX_PROTOCOL_CHAIN 7
|
|
#define WSAPROTOCOL_LEN 255
|
|
#define SOMAXCONN 0x7fffffff
|
|
|
|
typedef unsigned char u_char;
|
|
typedef unsigned short u_short;
|
|
typedef unsigned int u_int;
|
|
typedef unsigned long u_long;
|
|
typedef u_int SOCKET;
|
|
typedef unsigned int GROUP;
|
|
typedef ULONG SERVICETYPE;
|
|
|
|
struct sockaddr {
|
|
u_short sa_family;
|
|
char sa_data[14];
|
|
} SOCKADDR;
|
|
|
|
typedef struct WSAData {
|
|
WORD wVersion;
|
|
WORD wHighVersion;
|
|
char szDescription[WSADESCRIPTION_LEN+1];
|
|
char szSystemStatus[WSASYS_STATUS_LEN+1];
|
|
unsigned short iMaxSockets;
|
|
unsigned short iMaxUdpDg;
|
|
char *lpVendorInfo;
|
|
} WSADATA, *LPWSADATA;
|
|
|
|
typedef struct addrinfo {
|
|
int ai_flags;
|
|
int ai_family;
|
|
int ai_socktype;
|
|
int ai_protocol;
|
|
size_t ai_addrlen;
|
|
char *ai_canonname;
|
|
struct sockaddr *ai_addr;
|
|
struct addrinfo *ai_next;
|
|
} ADDRINFOA, *PADDRINFOA;
|
|
|
|
typedef struct fd_set {
|
|
u_int fd_count;
|
|
SOCKET fd_array[FD_SETSIZE];
|
|
} fd_set;
|
|
|
|
typedef struct in_addr {
|
|
union {
|
|
struct {
|
|
u_char s_b1,s_b2,s_b3,s_b4;
|
|
} S_un_b;
|
|
struct {
|
|
u_short s_w1,s_w2;
|
|
} S_un_w;
|
|
u_long S_addr;
|
|
} S_un;
|
|
} IN_ADDR, *PIN_ADDR, *LPIN_ADDR;
|
|
|
|
struct sockaddr_in {
|
|
short sin_family;
|
|
u_short sin_port;
|
|
struct in_addr sin_addr;
|
|
char sin_zero[8];
|
|
};
|
|
|
|
struct sockproto {
|
|
u_short sp_family;
|
|
u_short sp_protocol;
|
|
};
|
|
|
|
typedef struct hostent {
|
|
char *h_name;
|
|
char **h_aliases;
|
|
short h_addrtype;
|
|
short h_length;
|
|
char **h_addr_list;
|
|
} HOSTENT, *PHOSTENT, *LPHOSTENT;
|
|
|
|
typedef struct _WSAPROTOCOLCHAIN {
|
|
int ChainLen;
|
|
DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
|
|
} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN;
|
|
|
|
typedef struct _WSAPROTOCOL_INFO {
|
|
DWORD dwServiceFlags1;
|
|
DWORD dwServiceFlags2;
|
|
DWORD dwServiceFlags3;
|
|
DWORD dwServiceFlags4;
|
|
DWORD dwProviderFlags;
|
|
GUID ProviderId;
|
|
DWORD dwCatalogEntryId;
|
|
WSAPROTOCOLCHAIN ProtocolChain;
|
|
int iVersion;
|
|
int iAddressFamily;
|
|
int iMaxSockAddr;
|
|
int iMinSockAddr;
|
|
int iSocketType;
|
|
int iProtocol;
|
|
int iProtocolMaxOffset;
|
|
int iNetworkByteOrder;
|
|
int iSecurityScheme;
|
|
DWORD dwMessageSize;
|
|
DWORD dwProviderReserved;
|
|
TCHAR szProtocol[WSAPROTOCOL_LEN+1];
|
|
} WSAPROTOCOL_INFO, *LPWSAPROTOCOL_INFO;
|
|
|
|
typedef struct _WSABUF
|
|
{
|
|
ULONG len;
|
|
CHAR* buf;
|
|
} WSABUF, *LPWSABUF;
|
|
|
|
typedef struct _FLOWSPEC {
|
|
unsigned int TokenRate;
|
|
unsigned int TokenBucketSize;
|
|
unsigned int PeakBandwidth;
|
|
unsigned int Latency;
|
|
unsigned int DelayVariation;
|
|
SERVICETYPE ServiceType;
|
|
unsigned int MaxSduSize;
|
|
unsigned int MinimumPolicedSize;
|
|
} FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
|
|
|
|
typedef struct _QUALITYOFSERVICE {
|
|
FLOWSPEC SendingFlowspec;
|
|
FLOWSPEC ReceivingFlowspec;
|
|
WSABUF ProviderSpecific;
|
|
} QOS, *LPQOS;
|
|
|
|
typedef int (CALLBACK *LPCONDITIONPROC)(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD);
|
|
typedef struct sockaddr_in SOCKADDR_IN;
|
|
typedef struct sockaddr_in *PSOCKADDR_IN;
|
|
typedef struct sockaddr_in *LPSOCKADDR_IN;
|
|
|
|
WINAPI int WSAStartup __attribute__((dllimport))(WORD, LPWSADATA);
|
|
WINAPI int WSACleanup __attribute__((dllimport))();
|
|
WINAPI int getaddrinfo __attribute__((dllimport))(PCSTR, PCSTR, const ADDRINFOA*, PADDRINFOA*);
|
|
WINAPI SOCKET socket __attribute__((dllimport))(int, int, int);
|
|
WINAPI void freeaddrinfo __attribute__((dllimport))(struct addrinfo*);
|
|
WINAPI int closesocket __attribute__((dllimport))(SOCKET);
|
|
WINAPI int bind __attribute__((dllimport))(SOCKET, const struct sockaddr*, int);
|
|
WINAPI SOCKET accept __attribute__((dllimport))(SOCKET, struct sockaddr*, int*);
|
|
WINAPI BOOL AcceptEx __attribute__((dllimport))(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
|
|
WINAPI int connect __attribute__((dllimport))(SOCKET, const struct sockaddr*, int);
|
|
WINAPI int gethostname __attribute__((dllimport))(char*, int);
|
|
WINAPI int listen __attribute__((dllimport))(SOCKET, int);
|
|
WINAPI int recv __attribute__((dllimport))(SOCKET, char*, int, int);
|
|
WINAPI int recvfrom __attribute__((dllimport))(SOCKET, char*, int, int, struct sockaddr*, int*);
|
|
WINAPI int send __attribute__((dllimport))(SOCKET, char*, int, int);
|
|
WINAPI int sendto __attribute__((dllimport))(SOCKET, char*, int, int, const struct sockaddr*, int);
|
|
WINAPI int select __attribute__((dllimport))(int, fd_set*, fd_set*, fd_set*, const struct timeval*);
|
|
WINAPI int setsockopt __attribute__((dllimport))(SOCKET, int, int, const char*, int);
|
|
WINAPI char* inet_ntoa __attribute__((dllimport))(struct in_addr);
|
|
WINAPI unsigned long inet_addr __attribute__((dllimport))(const char*);
|
|
WINAPI int shutdown __attribute__((dllimport))(SOCKET, int);
|
|
WINAPI u_short htons __attribute__((dllimport))(u_short);
|
|
WINAPI u_long htonl __attribute__((dllimport))(u_long);
|
|
WINAPI struct hostent* gethostbyname __attribute__((dllimport))(const char*);
|
|
WINAPI struct hostent* gethostbyaddr __attribute__((dllimport))(const char*, int, int);
|
|
WINAPI int WSAGetLastError __attribute__((dllimport))();
|
|
WINAPI SOCKET WSASocket __attribute__((dllimport))(int, int, int, LPWSAPROTOCOL_INFO, GROUP, DWORD);
|
|
WINAPI SOCKET WSAAccept __attribute__((dllimport))(SOCKET, struct sockaddr*, LPINT, LPCONDITIONPROC, DWORD_PTR);
|