Skip to content

Instantly share code, notes, and snippets.

@Vitokhv
Created April 13, 2019 05:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Vitokhv/9d4c6feb3b47b8ea45581f52cc3e428b to your computer and use it in GitHub Desktop.
Save Vitokhv/9d4c6feb3b47b8ea45581f52cc3e428b to your computer and use it in GitHub Desktop.
Защита через IPsec (в разработке)
private void WriteRegKey(string keyName, string ipm1, string ipm2, string p1, string p2)
{
string value1 = p1; // Преобразование string в int
short i1 = Convert.ToInt16(value1);
int valueHex1 = IPAddress.NetworkToHostOrder(i1);
string h1 = valueHex1.ToString("X2");
string value2 = p2; // Преобразование string в int
short i2 = Convert.ToInt16(value2);
int valueHex2 = IPAddress.NetworkToHostOrder(i2);
string h2 = valueHex2.ToString("X2");
string str1 = ipm1;
var result1 = str1.Split('/');
string input1 = result1[0];
string hex3 = string.Concat(input1.Split('.').Select(x => int.Parse(x).ToString("X2").PadLeft(2, '0')));
int cidr1 = int.Parse(result1[1]);
BitVector32 bits1 = new BitVector32(-1 << (32 - cidr1));
string hex4 = bits1.Data.ToString("X2");
string str2 = ipm2;
var result2 = str2.Split('/');
string input3 = result2[0];
string hex5 = string.Concat(input3.Split('.').Select(x => int.Parse(x).ToString("X2").PadLeft(2, '0')));
int cidr2 = int.Parse(result2[1]);
BitVector32 bits2 = new BitVector32(-1 << (32 - cidr2));
string hex6 = bits2.Data.ToString("X2");
// Преобразование в IP
var bytes = BitConverter.GetBytes((uint)bits1.Data);
IPAddress netMask = new IPAddress(bytes.Reverse().ToArray());
var IP1 = hex3; // Адрес 8.8.8.8
var IPm1 = hex4; // Маска 255.255.255.255
var IP2 = hex5; // Адрес2 9.9.9.9
var IPm2 = hex6; // Маска 255.255.255.255
var Type = "06"; // Тип протокола (6) он же TCP
var Port1 = h1; // Порт 1111
var Port2 = h2; // Порт 2222
var guidText = (Guid.NewGuid().ToString("B"));
RegistryKey lm = Registry.LocalMachine;
RegistryKey cs1 = lm.CreateSubKey("SOFTWARE\\002");
RegistryKey cs2 = cs1.CreateSubKey("ipsecFilter" + guidText);
var hex2 = "B520DC80C82ED111A89E00A0248D30214600000001000000020000000000020000000000020000000000424899DBF729" +
"3E4B90A44D6BB8ACCB3001000000" + IP1 + IPm1 + IP2 + IPm2 + "00000000" + Type + "0000000000" + Port1 + Port2 + "00000000";
var valueReg = StringToByteArray(hex2);
cs2.SetValue("className", "ipsecFilter");
cs2.SetValue(keyName, valueReg, RegistryValueKind.Binary);
cs2.SetValue("ipsecDataType", "100", RegistryValueKind.DWord);
cs2.SetValue("ipsecID", guidText);
cs2.SetValue("ipsecName", "Белый список");
cs2.SetValue("name", "ipsecFilter" + guidText);
cs2.SetValue("whenChanged", "00000000", RegistryValueKind.DWord);
// Сохранение ключа и его значения в config.ini (value имя ключа || guidText имя раздела)
//ini.Write("ipsecFilter" + guidText, ip1 + "/" + ipm1, "IPsec");
ini.Write("ipsecFilter" + guidText, ipm1, "IPsec");
textBoxHex.Text = hex2;
}
private void buttonHex_Click(object sender, EventArgs e)
{
WriteRegKey("ipsecData", textBoxIPm1.Text, textBoxIPm2.Text, textBoxPort1.Text, textBoxPort2.Text);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment