├── 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 | --------------------------------------------------------------------------------