Skip to content

Commit 7535fe3

Browse files
committed
load project
1 parent b93a0d4 commit 7535fe3

File tree

114 files changed

+7998
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+7998
-0
lines changed

USBClientService/.gitignore

Lines changed: 533 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.31205.134
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "USBClientService", "USBClientService\USBClientService.csproj", "{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}"
7+
EndProject
8+
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "USBClientServiceInstaller", "USBClientServiceInstaller\USBClientServiceInstaller.wixproj", "{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}"
9+
EndProject
10+
Global
11+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
12+
Debug|Any CPU = Debug|Any CPU
13+
Debug|x86 = Debug|x86
14+
Release|Any CPU = Release|Any CPU
15+
Release|x86 = Release|x86
16+
EndGlobalSection
17+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
18+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Debug|Any CPU.Build.0 = Debug|Any CPU
20+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Debug|x86.ActiveCfg = Debug|Any CPU
21+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Debug|x86.Build.0 = Debug|Any CPU
22+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Release|Any CPU.Build.0 = Release|Any CPU
24+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Release|x86.ActiveCfg = Release|Any CPU
25+
{DFF8AA0F-D97E-4D2E-8FE3-3D8398A1157C}.Release|x86.Build.0 = Release|Any CPU
26+
{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}.Debug|Any CPU.ActiveCfg = Debug|x86
27+
{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}.Debug|x86.ActiveCfg = Debug|x86
28+
{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}.Debug|x86.Build.0 = Debug|x86
29+
{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}.Release|Any CPU.ActiveCfg = Release|x86
30+
{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}.Release|x86.ActiveCfg = Release|x86
31+
{7D0C468D-3C55-441D-B90C-7BCDEBB3C040}.Release|x86.Build.0 = Release|x86
32+
EndGlobalSection
33+
GlobalSection(SolutionProperties) = preSolution
34+
HideSolutionNode = FALSE
35+
EndGlobalSection
36+
GlobalSection(ExtensibilityGlobals) = postSolution
37+
SolutionGuid = {0E105E07-B009-4A09-A96E-E5A16AE8EB76}
38+
EndGlobalSection
39+
EndGlobal
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<startup>
4+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
5+
</startup>
6+
</configuration>

USBClientService/USBClientService/ClientService.Designer.cs

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using Microsoft.Win32;
2+
using Newtonsoft.Json;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Diagnostics;
6+
using System.Management;
7+
using System.ServiceProcess;
8+
using System.Text.RegularExpressions;
9+
10+
namespace USBClientService
11+
{
12+
public partial class ClientService : ServiceBase
13+
{
14+
private ManagementEventWatcher USBEventWatcher;
15+
private const string ipPattern = @"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
16+
private const string portPattern = @"([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])";
17+
private string ip = "127.0.0.1";
18+
private string port = "8889";
19+
private EventLog eventLog1;
20+
21+
public ClientService(){
22+
InitializeComponent();
23+
WqlEventQuery queryToGetUSBObj = new WqlEventQuery("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA'Win32_USBHub'");
24+
USBEventWatcher = new ManagementEventWatcher(queryToGetUSBObj);
25+
USBEventWatcher.EventArrived += HandleEventUSB;
26+
}
27+
28+
private void HandleEventUSB(object sender, EventArrivedEventArgs e){
29+
30+
ManagementBaseObject targetObj = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
31+
string chackClass = (string)e.NewEvent.Properties["__CLASS"].Value;
32+
Dictionary<string, string> USBDataAndHostInfo = null;
33+
34+
if (chackClass == "__InstanceDeletionEvent" || chackClass == "__InstanceCreationEvent"){
35+
36+
CollectInfo collectData = new CollectInfo(eventLog1, targetObj, chackClass);
37+
USBDataAndHostInfo = collectData.CollectData();
38+
string output = JsonConvert.SerializeObject(USBDataAndHostInfo);
39+
NetConnection TCPConnection = new NetConnection();
40+
TCPConnection.SendData(Convert.ToString(output), ip, port, eventLog1);
41+
}
42+
}
43+
44+
protected override void OnStart(string[] args){
45+
46+
eventLog1 = new System.Diagnostics.EventLog();
47+
if (!EventLog.SourceExists("EventUSBService"))
48+
{
49+
System.Diagnostics.EventLog.CreateEventSource("EventUSBService", "USBServiceLog");
50+
}
51+
52+
eventLog1.Source = "EventUSBService";
53+
eventLog1.Log = "USBServiceLog";
54+
55+
try
56+
{
57+
RegistryKey localMachineKey = Registry.LocalMachine;
58+
RegistryKey USBMonService = localMachineKey.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\USBClientService", true);
59+
string ImagePath = USBMonService.GetValue("ImagePath").ToString();
60+
string[] SplitMainPath = ImagePath.Split(new char[] { '^' });
61+
62+
if (SplitMainPath.Length > 1)
63+
{
64+
string[] IpAndPort = SplitMainPath[1].Split(new char[] { ' ' });
65+
66+
if (Regex.IsMatch(IpAndPort[1], ipPattern, RegexOptions.IgnoreCase))
67+
{
68+
ip = IpAndPort[1];
69+
}
70+
71+
if (Regex.IsMatch(IpAndPort[2], portPattern, RegexOptions.IgnoreCase))
72+
{
73+
port = IpAndPort[2];
74+
}
75+
}
76+
}
77+
catch (Exception ex)
78+
{
79+
eventLog1.WriteEntry("Не вдалося встановити початкові IP та Port за допомогоюреєстру : " + ex, EventLogEntryType.Error, 10);
80+
}
81+
82+
Dictionary<string,
83+
string> HostInfo = null;
84+
CollectInfo collectData = new CollectInfo(eventLog1);
85+
HostInfo = collectData.LaunchCollectData();
86+
string output = JsonConvert.SerializeObject(HostInfo);
87+
NetConnection TCPConnection = new NetConnection();
88+
TCPConnection.SendData(Convert.ToString(output), ip, port, eventLog1);
89+
eventLog1.WriteEntry("Служба почала роботу!", EventLogEntryType.Information, 1);
90+
USBEventWatcher.Start();
91+
}
92+
protected override void OnStop(){
93+
eventLog1.WriteEntry("Служба припинила роботу!", EventLogEntryType.Information, 2);
94+
USBEventWatcher.Stop();
95+
}
96+
97+
public void OnDebug(){
98+
OnStart(null);
99+
}
100+
}
101+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Management;
5+
using System.Net;
6+
using System.Net.NetworkInformation;
7+
using System.Net.Sockets;
8+
using System.Runtime.InteropServices;
9+
using System.Text.RegularExpressions;
10+
11+
namespace USBClientService{
12+
class CollectInfo {
13+
private string pattern = @"(?<VID>(?<=VID_).*(?=&))|(?<PID>(?<=PID_).*[^\\](?=\\))|(?<SN>(?<=PID_.*\\)[^\\].*)";
14+
private EventLog eventLog1;
15+
private ManagementBaseObject targetObj;
16+
private string chackClass;
17+
public CollectInfo(EventLog eventLog1, ManagementBaseObject targetObj, string chackClass) {
18+
this.eventLog1 = eventLog1;
19+
this.targetObj = targetObj;
20+
this.chackClass = chackClass;
21+
}
22+
public CollectInfo(EventLog eventLog1) {
23+
this.eventLog1 = eventLog1;
24+
}
25+
private IPAddress GetCurrentIPAddress() {
26+
using(Socket SetNewSocket = new Socket(AddressFamily.InterNetwork,
27+
SocketType.Dgram, 0)) {
28+
SetNewSocket.Connect("8.8.8.8", 65530);
29+
IPEndPoint IpendPoint = SetNewSocket.LocalEndPoint as IPEndPoint;
30+
return IpendPoint.Address;
31+
}
32+
}
33+
private string GetMacUseingIP(IPAddress ip) {
34+
byte[] macAddrByIP = new byte[6];
35+
int length = macAddrByIP.Length;
36+
SendARP(ip.GetHashCode(), 0, macAddrByIP, ref length);
37+
return BitConverter.ToString(macAddrByIP, 0, 6).Replace("-", ":");
38+
}
39+
40+
[DllImport("iphlpapi.dll", ExactSpelling = true)]
41+
public static extern int SendARP(int DeIP, int SoIP, [Out] byte[] pcMACAddr, ref int pPhyAddrLen);
42+
private void GetCurrentIPandMac(ref Dictionary < string, string > SaveData) {
43+
IPAddress ip = GetCurrentIPAddress();
44+
string mac = GetMacUseingIP(ip);
45+
SaveData.Add("ip", ip.ToString());
46+
SaveData.Add("mac", mac);
47+
48+
}
49+
private void getUSBinfo(ref Dictionary < string, string > SaveData) {
50+
string USBeventType = null;
51+
switch (chackClass) {
52+
case "__InstanceDeletionEvent":
53+
USBeventType = "disconnected";
54+
break;
55+
case "__InstanceCreationEvent":
56+
USBeventType = "connected";
57+
break;
58+
}
59+
Regex regex = new Regex(pattern);
60+
MatchCollection PidVidNumber = regex.Matches(Convert.ToString(targetObj["PNPDeviceID"]));
61+
SaveData.Add("date", DateTime.Now.ToString("dd.MM.yyyy"));
62+
SaveData.Add("time", DateTime.Now.ToString("T"));
63+
SaveData.Add("USBeventType", USBeventType);
64+
SaveData.Add("VID", PidVidNumber[0].Value);
65+
SaveData.Add("PID", PidVidNumber[1].Value);
66+
SaveData.Add("SN", PidVidNumber[2].Value);
67+
}
68+
69+
private void getHostinfo(ref Dictionary < string, string > SaveData) {
70+
IPGlobalProperties objPCProp = IPGlobalProperties.GetIPGlobalProperties();
71+
NetworkInterface[] NetIntf = NetworkInterface.GetAllNetworkInterfaces();
72+
PhysicalAddress macAddress = NetIntf[0].GetPhysicalAddress();
73+
SaveData.Add("macAddress", Convert.ToString(macAddress));
74+
SaveData.Add("hostName", objPCProp.HostName);
75+
}
76+
77+
public Dictionary < string, string > CollectData() {
78+
Dictionary < string, string > SaveData = new Dictionary < string, string > ();
79+
try {
80+
getUSBinfo(ref SaveData);
81+
getHostinfo(ref SaveData);
82+
GetCurrentIPandMac(ref SaveData);
83+
SaveData.Add("massageType", "1");
84+
} catch (Exception ex) {
85+
eventLog1.WriteEntry("Виникла помилка при отримані даних про USB або хосту!: " + ex, EventLogEntryType.Error, 11);
86+
}
87+
return SaveData;
88+
}
89+
90+
public Dictionary < string, string > LaunchCollectData() {
91+
Dictionary < string, string > SaveData = new Dictionary < string, string > ();
92+
try {
93+
getHostinfo(ref SaveData);
94+
GetCurrentIPandMac(ref SaveData);
95+
SaveData.Add("massageType", "2");
96+
} catch (Exception ex) {
97+
eventLog1.WriteEntry("Виникла помилка при отримані даних про USB або хосту!: " + ex, EventLogEntryType.Error, 11);
98+
99+
}
100+
return SaveData;
101+
}
102+
}
103+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using System.Diagnostics;
3+
using System.Net.Sockets;
4+
using System.Text;
5+
6+
namespace USBClientService{
7+
class NetConnection {
8+
9+
TcpClient SetConClient = null;
10+
public void SendData(string message, string ip, string port, EventLog eventLog1) {
11+
12+
try {
13+
SetConClient = new TcpClient(ip, Convert.ToInt32(port));
14+
NetworkStream mystream = SetConClient.GetStream();
15+
byte[] data = Encoding.Unicode.GetBytes(message);
16+
mystream.Write(data, 0, data.Length);
17+
} catch (Exception ex) {
18+
eventLog1.WriteEntry("Мережева помилка : " + ex, EventLogEntryType.Error, 12);
19+
} finally {
20+
if (SetConClient != null)
21+
SetConClient.Close();
22+
}
23+
}
24+
}
25+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.ServiceProcess;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace USBClientService
9+
{
10+
static class Program
11+
{
12+
/// <summary>
13+
/// Главная точка входа для приложения.
14+
/// </summary>
15+
static void Main()
16+
{
17+
18+
#if DEBUG
19+
ClientService myService = new ClientService();
20+
myService.OnDebug();
21+
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
22+
#else
23+
ServiceBase[] ServicesToRun;
24+
ServicesToRun = new ServiceBase[]
25+
{
26+
new ClientService()
27+
};
28+
ServiceBase.Run(ServicesToRun);
29+
#endif
30+
}
31+
}
32+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System.Reflection;
2+
using System.Runtime.CompilerServices;
3+
using System.Runtime.InteropServices;
4+
5+
// Общие сведения об этой сборке предоставляются следующим набором
6+
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
7+
// общие сведения об этой сборке.
8+
[assembly: AssemblyTitle("USBClientService")]
9+
[assembly: AssemblyDescription("")]
10+
[assembly: AssemblyConfiguration("")]
11+
[assembly: AssemblyCompany("")]
12+
[assembly: AssemblyProduct("USBClientService")]
13+
[assembly: AssemblyCopyright("Copyright © 2021")]
14+
[assembly: AssemblyTrademark("")]
15+
[assembly: AssemblyCulture("")]
16+
17+
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
18+
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
19+
// компонент COM, задайте для атрибута ComVisible этого типа значение TRUE.
20+
[assembly: ComVisible(false)]
21+
22+
// Указанный ниже идентификатор GUID предназначен для идентификации библиотеки типов, если этот проект будет видимым для COM-объектов
23+
[assembly: Guid("dff8aa0f-d97e-4d2e-8fe3-3d8398a1157c")]
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")]

0 commit comments

Comments
 (0)