-
Notifications
You must be signed in to change notification settings - Fork 264
Expand file tree
/
Copy pathIPHlpAPI.java
More file actions
265 lines (236 loc) · 7.44 KB
/
Copy pathIPHlpAPI.java
File metadata and controls
265 lines (236 loc) · 7.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
// SPDX-License-Identifier: BSD-3-Clause
package org.xbill.DNS.config;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
import com.sun.jna.platform.win32.Guid;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.W32APIOptions;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
@SuppressWarnings({
"java:S101",
"java:S131",
"java:S116",
"java:S1104",
"java:S2160",
"java:S100",
"unused",
})
interface IPHlpAPI extends Library {
IPHlpAPI INSTANCE = Native.load("IPHlpAPI", IPHlpAPI.class, W32APIOptions.ASCII_OPTIONS);
int AF_UNSPEC = 0;
int AF_INET = 2;
int AF_INET6 = 23;
int GAA_FLAG_SKIP_UNICAST = 0x0001;
int GAA_FLAG_SKIP_ANYCAST = 0x0002;
int GAA_FLAG_SKIP_MULTICAST = 0x0004;
int GAA_FLAG_SKIP_DNS_SERVER = 0x0008;
int GAA_FLAG_INCLUDE_PREFIX = 0x0010;
int GAA_FLAG_SKIP_FRIENDLY_NAME = 0x0020;
int GAA_FLAG_INCLUDE_WINS_INFO = 0x0040;
int GAA_FLAG_INCLUDE_GATEWAYS = 0x0080;
int GAA_FLAG_INCLUDE_ALL_INTERFACES = 0x0100;
int GAA_FLAG_INCLUDE_ALL_COMPARTMENTS = 0x0200;
int GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER = 0x0400;
@Structure.FieldOrder({"sin_family", "sin_port", "sin_addr", "sin_zero"})
class sockaddr_in extends Structure {
public sockaddr_in(Pointer p) {
super(p);
read();
}
public short sin_family;
public short sin_port;
public byte[] sin_addr = new byte[4];
public byte[] sin_zero = new byte[8];
}
@Structure.FieldOrder({"sin6_family", "sin6_port", "sin6_flowinfo", "sin6_addr", "sin6_scope_id"})
class sockaddr_in6 extends Structure {
public sockaddr_in6(Pointer p) {
super(p);
read();
}
public short sin6_family;
public short sin6_port;
public int sin6_flowinfo;
public byte[] sin6_addr = new byte[16];
public int sin6_scope_id;
}
@Structure.FieldOrder({"lpSockaddr", "iSockaddrLength"})
class SOCKET_ADDRESS extends Structure {
public Pointer lpSockaddr;
public int iSockaddrLength;
InetAddress toAddress() throws UnknownHostException {
switch (lpSockaddr.getShort(0)) {
case AF_INET:
sockaddr_in in4 = new sockaddr_in(lpSockaddr);
return InetAddress.getByAddress(in4.sin_addr);
case AF_INET6:
sockaddr_in6 in6 = new sockaddr_in6(lpSockaddr);
return Inet6Address.getByAddress("", in6.sin6_addr, in6.sin6_scope_id);
}
return null;
}
}
@Structure.FieldOrder({
"Length",
"IfIndex",
"Next",
"Address",
"PrefixOrigin",
"SuffixOrigin",
"DadState",
"ValidLifetime",
"PreferredLifetime",
"LeaseLifetime",
"OnLinkPrefixLength"
})
class IP_ADAPTER_UNICAST_ADDRESS_LH extends Structure {
public static class ByReference extends IP_ADAPTER_UNICAST_ADDRESS_LH
implements Structure.ByReference {}
public int Length;
public int IfIndex;
public IP_ADAPTER_UNICAST_ADDRESS_LH.ByReference Next;
public SOCKET_ADDRESS Address;
public int PrefixOrigin;
public int SuffixOrigin;
public int DadState;
public int ValidLifetime;
public int PreferredLifetime;
public int LeaseLifetime;
public byte OnLinkPrefixLength;
}
@Structure.FieldOrder({"Length", "Reserved", "Next", "Address"})
class IP_ADAPTER_DNS_SERVER_ADDRESS_XP extends Structure {
public static class ByReference extends IP_ADAPTER_DNS_SERVER_ADDRESS_XP
implements Structure.ByReference {}
public int Length;
public int Reserved;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference Next;
public SOCKET_ADDRESS Address;
}
@Structure.FieldOrder({"Length", "Reserved", "Next", "Address"})
class IP_ADAPTER_ANYCAST_ADDRESS_XP extends Structure {
public static class ByReference extends IP_ADAPTER_ANYCAST_ADDRESS_XP
implements Structure.ByReference {}
public int Length;
public int Reserved;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference Next;
public SOCKET_ADDRESS Address;
}
@Structure.FieldOrder({"Length", "Reserved", "Next", "Address"})
class IP_ADAPTER_MULTICAST_ADDRESS_XP extends Structure {
public static class ByReference extends IP_ADAPTER_MULTICAST_ADDRESS_XP
implements Structure.ByReference {}
public int Length;
public int Reserved;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference Next;
public SOCKET_ADDRESS Address;
}
@Structure.FieldOrder({"Next", "_String"})
class IP_ADAPTER_DNS_SUFFIX extends Structure {
public static class ByReference extends IP_ADAPTER_DNS_SUFFIX
implements Structure.ByReference {}
public IP_ADAPTER_DNS_SUFFIX.ByReference Next;
public char[] _String = new char[256];
}
@Structure.FieldOrder({"LowPart", "HighPart"})
class LUID extends Structure {
public int LowPart;
public int HighPart;
}
@Structure.FieldOrder({
"Length",
"IfIndex",
"Next",
"AdapterName",
"FirstUnicastAddress",
"FirstAnycastAddress",
"FirstMulticastAddress",
"FirstDnsServerAddress",
"DnsSuffix",
"Description",
"FriendlyName",
"PhysicalAddress",
"PhysicalAddressLength",
"Flags",
"Mtu",
"IfType",
"OperStatus",
"Ipv6IfIndex",
"ZoneIndices",
"FirstPrefix",
"TransmitLinkSpeed",
"ReceiveLinkSpeed",
"FirstWinsServerAddress",
"FirstGatewayAddress",
"Ipv4Metric",
"Ipv6Metric",
"Luid",
"Dhcpv4Server",
"CompartmentId",
"NetworkGuid",
"ConnectionType",
"TunnelType",
"Dhcpv6Server",
"Dhcpv6ClientDuid",
"Dhcpv6ClientDuidLength",
"Dhcpv6Iaid",
"FirstDnsSuffix",
})
class IP_ADAPTER_ADDRESSES_LH extends Structure {
public static class ByReference extends IP_ADAPTER_ADDRESSES_LH
implements Structure.ByReference {}
public IP_ADAPTER_ADDRESSES_LH(Pointer p) {
super(p);
read();
}
public IP_ADAPTER_ADDRESSES_LH() {}
public int Length;
public int IfIndex;
public IP_ADAPTER_ADDRESSES_LH.ByReference Next;
public String AdapterName;
public IP_ADAPTER_UNICAST_ADDRESS_LH.ByReference FirstUnicastAddress;
public IP_ADAPTER_ANYCAST_ADDRESS_XP.ByReference FirstAnycastAddress;
public IP_ADAPTER_MULTICAST_ADDRESS_XP.ByReference FirstMulticastAddress;
public IP_ADAPTER_DNS_SERVER_ADDRESS_XP.ByReference FirstDnsServerAddress;
public WString DnsSuffix;
public WString Description;
public WString FriendlyName;
public byte[] PhysicalAddress = new byte[8];
public int PhysicalAddressLength;
public int Flags;
public int Mtu;
public int IfType;
public int OperStatus;
public int Ipv6IfIndex;
public int[] ZoneIndices = new int[16];
public Pointer FirstPrefix;
public long TransmitLinkSpeed;
public long ReceiveLinkSpeed;
public Pointer FirstWinsServerAddress;
public Pointer FirstGatewayAddress;
public int Ipv4Metric;
public int Ipv6Metric;
public LUID Luid;
public SOCKET_ADDRESS Dhcpv4Server;
public int CompartmentId;
public Guid.GUID NetworkGuid;
public int ConnectionType;
public int TunnelType;
public SOCKET_ADDRESS Dhcpv6Server;
public byte[] Dhcpv6ClientDuid = new byte[130];
public int Dhcpv6ClientDuidLength;
public int Dhcpv6Iaid;
public IP_ADAPTER_DNS_SUFFIX.ByReference FirstDnsSuffix;
}
int GetAdaptersAddresses(
int family,
int flags,
Pointer reserved,
Pointer adapterAddresses,
IntByReference sizePointer);
}