17 11월

윈도우 방화벽 규칙 추가/삭제 – C#

방화벽 관련해서 참고는 구글링 웹문서들과 mdsn
https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa365344(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ff956124(v=vs.85).aspx

c#에서 방화벽에 규칙을 추가하는 방법을 찾던중에
쉽게 할 수 있는 방법이 있어 해당 코드를 안내합니다.

참조추가
FirewallAPI.dll 파일을 참조로 추가합니다.

규칙추가

INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
firewallRule.Description = "방화벽 규칙에 대한 설명을 입력합니다";
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
firewallRule.ApplicationName = Application.ExecutablePath + @"\app.exe";
firewallRule.InterfaceTypes = "All";
firewallRule.Name = "Rule name"; // 방화벽 규칙을 구분하는 이름, 삭제시에도 사용됩니다
firewallRule.Enabled = true;

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(firewallRule);

규칙삭제

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove("Rule name");

기존에 추가된 방화벽 규칙을 확인

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
foreach(INetFwRule rule in firewallPolicy.Rules)
{				
	Console.WriteLine(rule.Name);
}
23 7월

C#, PHP – RIJNDAEL 256bit 암/복호화

C#과 php간에 데이터를 주고 받아야 하는데
평문으로 통신하기에 무리가 있던 도중
기존에 사용하던 php 암호화 라이브러리와 연동되는 c# 코드를 발견~
살짝 수정해서 사용하는데 무리가 없음

기본은 128bit지만 256bit로 변경했음
php의 경우 블록에서 남는 부분을 zero로 채워넣기 때문에
c#에서 PaddingMode.Zeros를 설정해야 정상적으로 동작합니다.

Encryption.cs

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace TestClass
{
    class Encryption
    {
        private static byte[] rijnKey = Encoding.UTF8.GetBytes("abcdefg_abcdefg_");
        private static byte[] rijnIV = Encoding.UTF8.GetBytes("abcdefg_");

        public static String EncryptIt(String s)
        {
            String result;
            RijndaelManaged rijn = new RijndaelManaged();
            rijn.Mode = CipherMode.ECB;
            rijn.Padding = PaddingMode.Zeros; // php와의 연동에서 꼭 확인
            rijn.BlockSize = 256;

            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (ICryptoTransform encryptor = rijn.CreateEncryptor(rijnKey, rijnIV))
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(s);
                        }
                    }
                }
                result = Convert.ToBase64String(msEncrypt.ToArray());
            }
            rijn.Clear();

			result = Base64UrlEncode(result);

			return result;
        }

        public static String DecryptIt(String s)
        {
            String result;
            RijndaelManaged rijn = new RijndaelManaged();
            rijn.Mode = CipherMode.ECB;
            rijn.Padding = PaddingMode.Zeros;
            rijn.BlockSize = 256;

            s = Base64UrlDecode(s);

            using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(s)))
            {
                using (ICryptoTransform decryptor = rijn.CreateDecryptor(rijnKey, rijnIV))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader swDecrypt = new StreamReader(csDecrypt))
                        {
                            result = swDecrypt.ReadToEnd();
                        }
                    }
                }
            }
            rijn.Clear();

            return result;
        }

        public static string Base64UrlEncode(string arg)
        {
            arg = arg.Split('=')[0]; // Remove any trailing '='s
            arg = arg.Replace('+', '-'); // 62nd char of encoding
            arg = arg.Replace('/', '_'); // 63rd char of encoding
            return arg;
        }

        public static string Base64UrlDecode(string arg)
        {
            string s = arg;
            s = s.Replace('-', '+'); // 62nd char of encoding
            s = s.Replace('_', '/'); // 63rd char of encoding
            switch (s.Length % 4) // Pad with trailing '='s
            {
                case 0: break; // No pad chars in this case
                case 2: s += "=="; break; // Two pad chars
                case 3: s += "="; break; // One pad char
                default:
                    throw new System.Exception("Illegal base64url string!");
            }
            return s;
        }
    }
}

test.php

<?php
//Encryption function
function encryption($encrypt, $key, $iv)
{
    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
    mcrypt_generic_init($td, $key, $iv);
    $encrypted = mcrypt_generic($td, $encrypt);
    $encode = base64_encode($encrypted);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

	return $encode;
}


//Decryption function
function decryption($decrypt, $key, $iv)
{
    $decoded = base64safeDecode($decrypt);
    $decoded = base64_decode($decoded);
    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
    mcrypt_generic_init($td, $key, $iv);
    $decrypted = mdecrypt_generic($td, $decoded);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

    return trim($decrypted);
}

function base64safeDecode($data) {
	$data = str_replace("-", "+", $data);
	$data = str_replace("_", "/", $data);

	switch (strlen($data) % 4) {
		case 0: break;
		case 1: $data .= "=="; break;
		case 2: $data .= "="; break;
	}

	return $data;
}

$key = "abcdefg_abcdefg_";
$iv = "abcdefg_";

echo encryption("Hello world!", $key, $iv);
echo decryption("1ERpu8RaiyMqsXdjhCEu9IVMyQlz/A3fBR6vGbNxaVs=", $key, $iv);
?>
10 8월

C#.net – 인터넷 쿠키, 히스토리, 캐시 지우기

c#에서 인터넷 쿠키, 히스토리, 캐시를 지워야 할 경우 사용한다.

string[] strFiles1 = Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.History), "*", SearchOption.AllDirectories);
string[] strFiles2 = Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.Cookies), "*.txt", SearchOption.AllDirectories);
string[] strFiles3 = Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.InternetCache), "*", SearchOption.AllDirectories);


FileInfo fileDel = null;


foreach (string tmp in strFiles1)
{
    fileDel = new FileInfo(tmp);
    if (fileDel.Exists)
    {
        fileDel.Delete();
    }
}

26 7월

GetRequestStream() 사용시 지연문제

WebRequest req = WebRequest.Create(URL);
req.Method = “POST”;
req.ContentType = “application/x-www-form-urlencoded”;
byte[] byteArray = Encoding.UTF8.GetBytes(data);
req.ContentLength = byteArray.Length;

Stream ds = req.GetRequestStream();
ds.Write(byteArray, 0, byteArray.Length);
ds.Close();

req.GetRequestStrream(); 사용시 이상하게 딜레이가 생기는데,
구글의 도움을 얻어보니,
req.Proxy = null;
한줄 추가해주니 딜레이가 사라졌다.

 

Despite the fact that no proxy is configured on the machine, and IE/WinINet
are configured to never use a proxy, with automatic detection disabled,
HttpWebRequest was apparently trying to detect a proxy.

 

01 10월

yessign 코드서명용 인증서 무료발급 이벤트

금융결제원에서 8월 29일부터 국내 최초로 KISA인증서 기반의 국산 코드서명용 인증서를
발급합니다. 서비스 오픈을 기념하여 코드서명용 인증서 무료발급이벤트를 실시하오니 아래를
참조하시어 무료발급의 혜택을 누려보세요!


코드서명용 인증서란?
   응용프로그램 배포 시 배포자를 확인할 수 있도록 해당 프로그램에 전자서명하는 인증서







● 서비스 오픈일시 : 2008.8.29

● 무료발급기간 : 서비스 본격실시(11월중)전 까지
   ※ 이벤트 종료 후 정상발급가 : 15만원(1년형 인증서 기준, 부가세 제외)

● 발급방법 : ① 홈페이지(https://www.yessign.or.kr/ssl) 회원가입 후
                     발급신청(신청 시 무통장입금 선택)
                 ② 구비서류 송부(사업자등록증 및 전화번호 영수증)
                 ③ 담당자 통화 후 발급완료


※ 참고 : 무료로 발급되는 인증서는 시점확인기능을 포함하고 있지 않음(추후 제공예정)
※ 관련 문의 : 02-531-3323




yessign 코드서명용 인증서의 많은 이용을 부탁드립니다. 감사합니다.

10 1월

VB.Net 2003에서 웹CGI script로 multipart/form-data posting하기

안녕하세요.


VB .NET 2003 windows application에서 특정 웹의 CGI script로 데이타를 보낸 후 그 결과를 받아오는 방법을 알고 싶습니다.


http://pubchem.ncbi.nlm.nih.gov/search/PreQSrv.cgi 로 query를 보내는 것인데,


솔직히 어떻게 해야 될지 잘 모르겠습니다.


http://pubchem.ncbi.nlm.nih.gov/search/ 에 가면 구조 검색 기능이 있는데,


여기에 SMILES 에 예를 들어 ‘CCCCCC’를 넣고 ‘Search’버튼을 누르면,


해당 검색 queyr를 위의 PreQSrv.cgi로 보내게 됩니다.


POST method를 사용하는데,


어떤 식으로 VB .Net에서 구현을 해야될지 모르겠습니다. -_-;;


여러군데 찾아다녀서 아래와 같은 코드를 얻었는데, 계속해서 에러만 납니다.


(Console application 용으로 간단하게 만든것입니다.)


postData가 잘못된 것 같기도 하고 도무지 모르겠습니다. -_-.


고수님들의 조언 꼭 부탁드립니다. 미리 감사드립니다.


——————————————————————————————————————–


Imports System


Imports System.IO


Imports System.Net


Imports System.Text


Module Module1


    Sub Main()


        ‘ Create a request using a URL that can receive a post.


        Dim request As WebRequest = WebRequest.Create(“http://pubchem.ncbi.nlm.nih.gov/search/PreQSrv.cgi”)


        ‘ Set the Method property of the request to POST.


        request.Method = “POST”


        ‘ Create POST data and convert it to a byte array.


        Dim postData As String = “simpledata_search=CCCCCC&mode=simplequery&check=remote&execution=remote&queue=ssquery&output=entrez”


        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)


        ‘ Set the ContentType property of the WebRequest.


        request.ContentType = “multipart/form-data”


        ‘ Set the ContentLength property of the WebRequest.


        request.ContentLength = byteArray.Length


        ‘ Get the request stream.


        Dim dataStream As Stream = request.GetRequestStream()


        ‘ Write the data to the request stream.


        dataStream.Write(byteArray, 0, byteArray.Length)


        ‘ Close the Stream object.


        dataStream.Close()


        ‘ Get the response.


        Dim response As WebResponse = request.GetResponse()


        ‘ Display the status.


        Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)


        ‘ Get the stream containing content returned by the server.


        dataStream = response.GetResponseStream()


        ‘ Open the stream using a StreamReader for easy access.


        Dim reader As New StreamReader(dataStream)


        ‘ Read the content.


        Dim responseFromServer As String = reader.ReadToEnd()


        ‘ Display the content.


        Console.WriteLine(responseFromServer)


        ‘ Clean up the streams.


        reader.Close()


        dataStream.Close()


        response.Close()


    End Sub


End Module


————————————————————————————————————-