같이 공부하는 마음으로, 시작해봅시다.

 

1. 기존에 프로젝트가 준비 되어 있으면 바로 다음단계로(2) 이동. 필자는 실행하면 윈폼창이 뜨는 프로그램을 샘플로 작성하였습니다.

설치할 프로그램을 준비

2. [솔루션] 창에서 오른쪽 마우스 클릭 -> [추가] -> [새 프로젝트]를 차례대로 클릭 하고 새 창이 뜨면

   [Visual Studio Installer] -> [Setup Project] 선택

   인스톨 프로그램의 프로젝트 명을 입맛대로 변경 후 확인 하면 (4)로

   Visual Studio Installer 설치가 되어 있지 않으면 안보일 수 있습니다. 그럼 (3) 으로 이동

 

3. Visual Studio Installer 가 설치가 되어 있지 않은 경우만 보세요

   상단 메뉴의 [도구] -> [확장 및 업데이트] -> [온라인] -> 검색어 Visual Studoi Installer 를 검색하고 설치.

   필자는 이미 설치 했기 때문에 [설치됨] 항목에 나타납니다. 아래 사진에 보이는 Visual Studio Installer Projects 입니다.

 

4. 아래와 같은 화면이 나오면 된겁니다

5. 그럼 [Application Folder] 를 마우스 우클릭 하고 [Add] -> [프로젝트 출력] 을 선택하면 [프로젝트 출력 그룹 추가] 라는 폼이 뜨는데 이미 프로젝트가 있으면 선택되어 져서 나올 껍니다. [확인]

그럼 기본 출력란이 바뀌었는지 확인 하고 솔루션 창에서 Installer 프로젝트를 빌드 하고 정상적으로 빌드 됐는지 확인 하면 됩니다.

 

6. 디렉토리에 setup.exe 프로그램이 정상적으로 만들어졌는지 확인하고 실제로 설치를 해봅시다.

   ~.msi 파일로 설치해도 됩니다. 

   주의점은 원 프로젝트가 빌드가 되어 있어야 하고, debug, release 모드를 구분하기 때문에 실제 배포시에는 release 로 빌드하시는게 좋겠죠.

 

다음에는 좀더 디테일 하게 installer 프로젝트를 다뤄보고 알려드리도록 하겠습니다.

 

[C#] Visual Studio Installer 사용하기 (2)

 

(base) [root@guest ~]# netstat
-bash: netstat: command not found

자.. 당황하지 말고~

(base) [root@guest nshopassist]# yum -y install net-tools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.25.20131004git.el7 will be installed
--> Finished Dependency Resolution
...
...
Running transaction
  Installing : net-tools-2.0-0.25.20131004git.el7.x86_64                                                                              1/1
  Verifying  : net-tools-2.0-0.25.20131004git.el7.x86_64                                                                              1/1

Installed:
  net-tools.x86_64 0:2.0-0.25.20131004git.el7

Complete!
(base) [root@guest nshopassist]# netstat -h
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

help 명령이 잘되는 것까지 확인.

  • openssl 설치 확인 (설치가 되어 있지 않다면 openssl 설치 필요)
(base) [root@guest ~]# openssl version
OpenSSL 1.1.1g  21 Apr 2020

 

  • rsa 키파일을 생성한다
(base) [root@guest ~]# openssl genrsa 1024 > rsa.key
Generating RSA private key, 1024 bit long modulus(2 primes)
................+++++
..................+++++
e is 65537 (0x010001)

 

  • cert 파일을 생성한다
(base) [root@guest ~]# openssl req -new -x509 -nodes -sha256 -days 365 -key rsa.key > django.cert
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ko
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ososoi
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ososoi
Email Address []:ososoi@daum.net
(base) [root@guest ~]#

-x509

이 옵션은 인증서 요청 대신 자체 서명 된 인증서를 출력합니다. 일반적으로 테스트 인증서 또는 자체 서명 된 루트 CA를 생성하는 데 사용됩니다

 

-days n

옵션을 사용하는 경우 인증서를 인증 할 일 수를 지정합니다. 기본값은 30 일입니다.

 

  • django 프로젝트의 setting.py 을 열어 sslserver 앱을 추가한다.
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sslserver',
]

 

  • 서버를 실행한다. 필자는 이미 443포트를 사용하고 있기 때문에, 8443 포트를 열어서 사용하도록 하였다.
(base) [root@guest nshopassist]# python manage.py runsslserver --certificate django.cert --key rsa.key 0.0.0.0:8443
Watching for file changes with StatReloader
Validating models...

System check identified no issues (0 silenced).
June 29, 2020 - 21:43:13
Django version 3.0.3, using settings 'nshopassist.settings'
Starting development server at https://0.0.0.0:8443/
Using SSL certificate: django.cert
Using SSL key: rsa.key
Quit the server with CONTROL-C.

 

19금(?) 으로 봐주시지 마시고.. 자연스러운 여행 이야기로 봐주시면 감사하겠습니다

 

제주공항과 그리 멀지 않은 곳에 서문공설 시장이 있습니다. 용담동에 위치하고 있으며 제주시 서부지역의 대표적인 재래시장이라고 합니다. 공항 근처는 항상 차량이 많기 때문에 공항에서 차로 15분 ~ 20분 정도 여유있게 잡으시면 될것 같습니다.

 

그리고 공영주차장 쌉니다. 저는 레이를 끌고 갔는데 식사하고 구경하고 약 한시간 좀 넘게 있었던거 같은데 오잉? 200원. !!  나왔네요. 가지고 있는 현금이 없어서 카드로 결제하기 좀 민망했는데 주차원 분께서 오히려 괜찮다며 당연한거라고 하시네요.

 

재래시장에 이것저것 구경하는데 가게 아주머니께서 몸에 좋다며 술을 파시던데 그 이름은 바로..

 

벌떡?

 

내용물을 개봉하니.. 남자의 성기모양으로 된 잔이.. 

아.. 상당히 잘 만들...

자세히 보면 돌하루방 얼굴이 새겨져 있습니다. 적당한(?) 크기에 이 잔의 특이한 것은 일단 술을 따르면 다 마셔야 한다는 것입니다. 아니면 계속 손에 들고 있어야 해요.. 허허

 

원샷 노브레끼닷!

술을 그다지 잘 마시지 못하는 저로써는 잔을 계속 들고 있어야 한다는 부담감이...

 

술맛은 첨엔 약간 밍밍했는데 좀 있으니 속에서 뜨끈뜨끈하게 올라오더라구요.

음.. 좀더 디테일하게 설명하자면 삼계탕집에서 나오는 인삼주인데 약간 밍밍한 느낌?

13% 이니 부담없이 마실 수 있을 것 같습니다.

원재료는 구기자, 야관문, 토사자, 산사자등.. 여러 약재,식물이 포함되어 있고 약주로 분류되어 있네요. 

저는 사진에 콧수염을 붙였지만 인터넷에 원본 사진이 많이 널려 있습니다ㅎ

 

Q) 특정 호스트를 지정하기 어려운경우, 점검을 해야할 시간을 특정 하지 못할 때, 어떤 패킷이 랜덤하게 들어올때 , 다량의 패킷을 tcmpdump 떠야 할때 어떻게 해야할까 ?

 

위와 같은 상황에서 좀더 tcmpdump 를 유용하게 쓸 수 있는 방법에 대해서 알아봅시다.

 

사용하게된 옵션들은 아래와 같습니다.

-C : 파일 사이즈 The units of file_size are millions of bytes(1,000,000 bytes, not 1,048,576 bytes).  

-W : 최대 파일 갯수

-Z root : 파일을 나누어 남길때 권한 오류가 발생한다면 추가

-i any : 모든 인터페이스

 

icmp 패킷만, 10MB의 크기로, 최대 10개의 파일을 생성하게 하고 , 계속 로테이션 되게 로그를 쌓고 싶을 경우 아래와 같이 사용합니다. 캡쳐된 내용이 capfile0, capfile1, capfile2... 으로 9까지 생기고 계속 로테이션 되면서 기록됩니다.

$ tcpdump icmp -C 10 -W 10 -w capfile

 

권한오류가 발생 할 수도 있습니다. 그럴 경우 마지막에 -Z root 을 추가하여 루트권한으로 실행하도록 합니다.

 tcpdump -i any icmp -C 10 -W 10 -w capfile -Z root

 

예제추가) 백그라운드로, 모든 인터페이스, udp 161 포트, 소스아이피 또는 목적지아이피가 10.0.0.1 , 파일은 10개 크기는 20MB씩 로테이션이 되도록 하고 파일명은 dump~ , 루트권한으로 실행

 $ nohup tcpdump -i any src 10.0.0.1 or dst 10.0.0.1 and udp port 161 -W 10 -C 20 -w dump -Z root &

 

위를 잘 활용하면, 네트워크의 문제 (ping 유실, 네트워크 부하, 이상 패킷 흐름) 등의 모니터링을 하는데 도움을 줄 수 있다고 생각합니다. 실제로 현업에서 며칠에 한번씩 랜덤하게 ping 유실되는 것을 증명할 때 사용하기도 했습니다.  디스크 용량을 확인하고 적절하게 계산하여 원하는 만큼의 기간동안의 패킷을 로깅 할 수 있습니다.

 

같이 보기 [Linux/Unix] Tcpdump 

 

[Linux/Unix] Tcpdump

개요  명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어이다. 사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 준

ososoi.tistory.com

 

  • 개요

 명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어이다. 사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 준다. BSD 허가서를 통해 배포되는[2] tcpdump는 자유 소프트웨어이다.

tcpdump는 리눅스, 솔라리스, BSD, 맥 OS X, HP-UX, AIX 따위의 대부분의 유닉스 계열 운영 체제에서 동작하며 여기서 libpcap 라이브러리를 사용하여 패킷을 포획한다. 윈도용 tcpdump 이식판으로는 WinDump가 있으며, 이는 libpcap의 윈도 이식판인 WinPcap을 이용한다.  - wiki 백과

 

<조건식(expression)>

옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조 건식에 부합하는 패킷만을 출력한다.

조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다.

 

type : 주어진 값의 종류가 무엇인지를 나타낸다. 가능한 type들은 'host', 'net', 'port'가 있다. type이 없는 값들은 type을 host라 가정한다.

 

dir : id로 부터의 어떤 특정한 전송 방향을 나타낸다. 가능한 방향은 'src', 'dst', 'src or dst', 'src and dst'이다. 만약 방향이 정해지지 않았다면, src or dst라 가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the inb ound and out bound qualifiers can be used to specify a desired direction."

 

proto : 매칭을 특정 프로토콜에 한해서 수행한다. 가능한 프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약 프로토콜이 명시되지 않았다면, 해당하는 값의 type에 관련된 모든 프로토콜들이 그 대상이 된다.


  • 사용예

<옵션>
-c Number : 제시된 수의 패킷을 받은 후 종료한다.
-i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지정하지 않을 경우 가장 낮은 번호를 가진 인터페이스를 선택한다(이 때 loopback은 제외된다).

-i any : 인터페이스를 구분 하지 않는다. 

-w tcpdump.log : 결과를 tcpdump.log 파일에 저장함.(임의로 지정가능)

-s 1500 :캡쳐할 패킷의 길이로서 1500은 패킷의 전체길이를 의미하므로 모든 패킷을 캡쳐하게됨.

tcp port 22 : 캡쳐할 대상 프로토콜과 포트를 지정한 것으로 tcp 포트 22번으로 송수신되는 데이터를 캡쳐하게 됨.

host 192.168.0.1 :192.168.0.1 서버와 송수신되는 데이터를 대상으로 캡쳐함.

 

A와 B사이의 주고받는 icmp 패킷을 캡쳐할 경우

tcpdump host A and host B and icmp

10.0.0.1 과 10.0.0.13 의 icmp 패킷 캡쳐

여기서 조금더 응용을 하여 A와 B의 주고받는 포트 161을 사용하는 udp 패킷을 캡쳐해서 파일로 저장한다면,

tcpdump -w tcpdump.log host A and host B and udp port 161

10.0.0.1과 10.0.0.22 사이의 udp 161 포트를 캡쳐하여 tcpdump.log 파일에 기록

파일로 저장하였기 때문에 화면에 출력되는 것은 없다.

임의의 패킷을 전송한 후 만들어진 tcpdump.log 파일을 열어보자. 아래와 같이 바이너리 형태로 저장되기 때문에 내용을 알 기 어렵다. 

이를  옵션 -r 을 사용하여 파일을 확인해보자. 

tcpdump -r tcpdump.log

-r 옵션을 사용하여 파일을 열어보면, 10.0.0.1 에서 10.0.0.22 로 snmp 프로토콜 sysUpTime을 요청하였고 그에 대한 응답을 주는 것을 확인 할 수 있다.

hex코드로 출력하길 원한다면

tcpdump -Xqnr tcpdump.log

 

이는 tcpdump 의 아주 작은 조각에 불과합니다. 더 자세한 것은 manpage를 적극 활용 보면 좋겠습니다.

 

다음번에 tcpdump 에 대해서 또 유용하게 쓸수 있는 기능을 소개해 보겠습니다.

 

 

 

같이 보기 [Linux/Unix] Tcpdump(2)

 

[Linux/Unix] Tcpdump(2)

Q) 특정 호스트를 지정하기 어려운경우, 점검을 해야할 시간을 특정 하지 못할 때, 어떤 패킷이 랜덤하게 들어올때 , 다량의 패킷을 tcmpdump 떠야 할때 어떻게 해야할까 ? 위와 같은 상황에서 좀더

ososoi.tistory.com

 

'까벨로퍼 > 개발 이야기' 카테고리의 다른 글

[Django] openssl 인증서로 https 사용  (2) 2020.06.29
[Linux/Unix] Tcpdump(2)  (0) 2020.06.29
[c/c++] strcpy,strncpy,memcpy  (0) 2020.06.28
[Xcode] 단축키 모음  (0) 2020.06.26
[c#] 프로그램에 아이콘 집어넣기  (0) 2020.06.24

+ Recent posts