├── bin
├── Debug
│ ├── SharpOXID-Find.exe
│ ├── SharpOXID-Find.pdb
│ └── SharpOXID-Find.exe.config
└── Release
│ ├── SharpOXID-Find.exe
│ ├── SharpOXID-Find.pdb
│ └── SharpOXID-Find.exe.config
├── App.config
├── threadStart.cs
├── README.md
├── SharpOXID-Find.csproj.user
├── Properties
└── AssemblyInfo.cs
├── SharpOXID-Find.csproj
└── Program.cs
/bin/Debug/SharpOXID-Find.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uknowsec/SharpOXID-Find/HEAD/bin/Debug/SharpOXID-Find.exe
--------------------------------------------------------------------------------
/bin/Debug/SharpOXID-Find.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uknowsec/SharpOXID-Find/HEAD/bin/Debug/SharpOXID-Find.pdb
--------------------------------------------------------------------------------
/bin/Release/SharpOXID-Find.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uknowsec/SharpOXID-Find/HEAD/bin/Release/SharpOXID-Find.exe
--------------------------------------------------------------------------------
/bin/Release/SharpOXID-Find.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uknowsec/SharpOXID-Find/HEAD/bin/Release/SharpOXID-Find.pdb
--------------------------------------------------------------------------------
/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/bin/Debug/SharpOXID-Find.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/bin/Release/SharpOXID-Find.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/threadStart.cs:
--------------------------------------------------------------------------------
1 | namespace SharpOXID_Find
2 | {
3 | public class threadStart
4 | {
5 | private string ipss = "";
6 |
7 | public threadStart(string ip)
8 | {
9 | this.ipss = ip;
10 | }
11 |
12 | public void method_0()
13 | {
14 | Program.OXID(this.ipss);
15 | }
16 | }
17 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SharpOXID-Find
2 |
3 | 学习@RcoIl师傅的代码[SharpOXID-Find](https://github.com/RcoIl/CSharp-Tools/tree/master/SharpOXID-Find),加了个多线程,支持cidr格式传入ip地址。
4 |
5 | 强推一波@RcoIl师傅charp代码库[CSharp-Tools](https://github.com/RcoIl/CSharp-Tools/)。
6 |
7 |
8 | ## usage
9 | ```
10 | > SharpOXID-Find.exe
11 |
12 | usage: SharpOXID_Find.exe -i 192.168.0.1
13 | usage: SharpOXID_Find.exe -c 192.168.0.1/24
14 | ```
15 |
16 |
--------------------------------------------------------------------------------
/SharpOXID-Find.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 192.168.154.129
9 |
10 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("SharpOXID-Find")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Microsoft")]
12 | [assembly: AssemblyProduct("SharpOXID-Find")]
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2020")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | //将 ComVisible 设置为 false 将使此程序集中的类型
18 | //对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
19 | //请将此类型的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("aeb390be-5480-4982-ad63-57a325f01ea2")]
24 |
25 | // 程序集的版本信息由下列四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”: :
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SharpOXID-Find.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {AEB390BE-5480-4982-AD63-57A325F01EA2}
8 | Exe
9 | Properties
10 | SharpOXID_Find
11 | SharpOXID-Find
12 | v4.0
13 | 512
14 | true
15 |
16 |
17 |
18 | AnyCPU
19 | true
20 | full
21 | false
22 | bin\Debug\
23 | DEBUG;TRACE
24 | prompt
25 | 4
26 |
27 |
28 | AnyCPU
29 | pdbonly
30 | true
31 | bin\Release\
32 | TRACE
33 | prompt
34 | 4
35 |
36 |
37 | SharpOXID_Find.Program
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
65 |
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using System.Diagnostics;
5 | using System.Linq;
6 | using System.Net.Sockets;
7 | using System.Text;
8 | using System.Text.RegularExpressions;
9 | using System.Threading;
10 |
11 | namespace SharpOXID_Find
12 | {
13 | class Program
14 | {
15 | #region OXID 请求解析
16 | static byte[] buffer_v1 ={ /* Packet 431 */
17 | 0x05, 0x00, 0x0b, 0x03, 0x10, 0x00, 0x00, 0x00,
18 | 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
19 | 0xb8, 0x10, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x00,
20 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
21 | 0xc4, 0xfe, 0xfc, 0x99, 0x60, 0x52, 0x1b, 0x10,
22 | 0xbb, 0xcb, 0x00, 0xaa, 0x00, 0x21, 0x34, 0x7a,
23 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x5d, 0x88, 0x8a,
24 | 0xeb, 0x1c, 0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00,
25 | 0x2b, 0x10, 0x48, 0x60, 0x02, 0x00, 0x00, 0x00 };
26 |
27 | static byte[] buffer_v2 ={/* Packet 433 */
28 | 0x05, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x00,
29 | 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00 };
31 | #endregion
32 |
33 | private static List Network2IpRange(string sNetwork)
34 | {
35 | string[] iparray = new string[0];
36 | List iparrays = iparray.ToList();
37 | uint ip, /* ip address */
38 | mask, /* subnet mask */
39 | broadcast, /* Broadcast address */
40 | network; /* Network address */
41 |
42 | int bits;
43 |
44 | string[] elements = sNetwork.Split(new Char[] { '/' });
45 |
46 | ip = IP2Int(elements[0]);
47 | bits = Convert.ToInt32(elements[1]);
48 |
49 | mask = ~(0xffffffff >> bits);
50 |
51 |
52 | network = ip & mask;
53 | broadcast = network + ~mask;
54 | uint usableIps = (bits > 30) ? 0 : (broadcast - network - 1);
55 | Console.WriteLine("[+] ip range {0} - {1} ", IntToIp(network + 1), IntToIp(broadcast - 1));
56 | for (uint i = 1; i < usableIps + 1; i++)
57 | {
58 | //Console.WriteLine(IntToIp(network + i));
59 | iparrays.Add(IntToIp(network + i));
60 | }
61 | return iparrays;
62 | }
63 |
64 | public static uint IP2Int(string IPNumber)
65 | {
66 | uint ip = 0;
67 | string[] elements = IPNumber.Split(new Char[] { '.' });
68 | if (elements.Length == 4)
69 | {
70 | ip = Convert.ToUInt32(elements[0]) << 24;
71 | ip += Convert.ToUInt32(elements[1]) << 16;
72 | ip += Convert.ToUInt32(elements[2]) << 8;
73 | ip += Convert.ToUInt32(elements[3]);
74 | }
75 | return ip;
76 | }
77 |
78 | public static string IntToIp(uint ipInt)
79 | {
80 | StringBuilder sb = new StringBuilder();
81 | sb.Append((ipInt >> 24) & 0xFF).Append(".");
82 | sb.Append((ipInt >> 16) & 0xFF).Append(".");
83 | sb.Append((ipInt >> 8) & 0xFF).Append(".");
84 | sb.Append(ipInt & 0xFF);
85 | return sb.ToString();
86 | }
87 | public static ArrayList arrayList = new ArrayList();
88 |
89 | ///
90 | /// ip处理,线程分配
91 | ///
92 | ///
93 | public static void ThreadList(string ip)
94 | {
95 | Console.WriteLine("");
96 | try
97 | {
98 | ip = ip.Trim();
99 | // Console.WriteLine(ip);
100 | foreach (string s in Network2IpRange(ip))
101 | {
102 | arrayList.Add(new threadStart(s));
103 | //Console.WriteLine(s);
104 | }
105 | Thread[] array = new Thread[arrayList.Count];
106 | for (int j = 0; j < arrayList.Count; j++)
107 | {
108 | array[j] = new Thread(new ThreadStart(((threadStart)arrayList[j]).method_0));
109 | array[j].Start();
110 | }
111 | for (int j = 0; j < array.Length; j++)
112 | {
113 | array[j].Join();
114 | }
115 | GC.Collect();
116 | arrayList.Clear();
117 | }
118 | catch (Exception ex)
119 | {
120 | Debug.Print(ex.Message);
121 | }
122 | }
123 |
124 | #region byte[] 与 hex 的互转
125 | ///
126 | /// byte[]数组转16进制文件
127 | ///
128 | ///
129 | ///
130 | private static String Byte2Hex(byte[] bytContents)
131 | {
132 | int length = bytContents.Length;
133 | StringBuilder builder = new StringBuilder(length * 3);
134 | foreach (byte value in bytContents)
135 | {
136 | builder.AppendFormat("{0:x} ", value);
137 |
138 | }
139 | return builder.ToString();
140 | }
141 |
142 | ///
143 | /// 16 进制转 byte[] 数组
144 | ///
145 | /// 16 进制字符串
146 | ///
147 | public static byte[] Hex2Byte(string hexContent)
148 | {
149 | string[] arry = hexContent.Split(' ');
150 | arry = arry.Skip(0).Take(arry.Length - 1).ToArray();
151 | List lstRet = new List();
152 | foreach (string s in arry)
153 | {
154 | lstRet.Add(Convert.ToByte(s, 16));
155 | }
156 | return lstRet.ToArray();
157 | }
158 | #endregion
159 |
160 |
161 | public static void OXID(string ip)
162 | {
163 |
164 | string host = ip;
165 | try
166 | {
167 | byte[] response_v0 = new byte[1024];
168 | using (var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
169 | {
170 | sock.Connect(host, 135);
171 | sock.Send(buffer_v1);
172 | sock.Receive(response_v0);
173 | sock.Send(buffer_v2);
174 | sock.Receive(response_v0);
175 | }
176 |
177 | String response_v1 = Byte2Hex(response_v0.Skip(40).ToArray());
178 | String response_v2 = response_v1.Substring(0, int.Parse(response_v1.IndexOf("9 0 ff ff 0").ToString()));
179 | String[] hostname_list = response_v2.Split(new string[] { "0 0 0 " }, StringSplitOptions.RemoveEmptyEntries);
180 | //Console.WriteLine("\n[*] Retrieving network interfaces of {0}", host);
181 | string outprintf = "\n[*] Retrieving network interfaces of " + host ;
182 | for (int i = 0; i < hostname_list.Length - 1; i++)
183 | {
184 | outprintf = outprintf + "\n [>] Address:" + Encoding.Default.GetString(Hex2Byte(hostname_list[i].Replace(" 0", "")));
185 | }
186 | Console.WriteLine(outprintf);
187 | }
188 | catch (Exception ex)
189 | {
190 | // Console.WriteLine("[!] Error: {0}", ex.Message);
191 | }
192 |
193 | }
194 |
195 | private static void sleep(int v)
196 | {
197 | throw new NotImplementedException();
198 | }
199 |
200 | static void Main(string[] args)
201 | {
202 | if (args.Contains("-c"))
203 | {
204 | ThreadList(args[1]);
205 | }
206 | else if (args.Contains("-i"))
207 | {
208 | OXID(args[1]);
209 | }
210 | else
211 | {
212 | Console.WriteLine("usage: SharpOXID_Find.exe -i 192.168.0.1");
213 | Console.WriteLine("usage: SharpOXID_Find.exe -c 192.168.0.1/24");
214 | }
215 |
216 | Console.WriteLine("Finish!");
217 | }
218 |
219 | }
220 | }
221 |
--------------------------------------------------------------------------------