728x90
300x250

[컴퓨터 - PC활용] MobaXterm - (Home Edition) 소개 - SSH 프로그램


이번에 소개할 프로그램은 MobaXterm이라는 프로그램을 소개하려고 한다.

MobaXterm이라는 프로그램은 SSH Client에 사용하는 프로그램이라고 보면 된다.


(작성중이다.)


[작성 환경]

* 운영체제: Microsoft Windows 7, 10



1. 소개


MobaXterm 사이트에 접속한다.




그림 1. MobaXterm - 소개



그림 2. MobaXterm - Download


Home Edition의 "Download now"를 클릭한다.



그림 3. MobaXterm Home Edition


MobaXterm Home Edition v20.6(Portable edition)

MobaXterm Home Edition v20.6(Installer edition)


둘 중 하나를 받으면 된다.


* 어렵고 복잡한 프로그램인가요?

= 아니다.


* 참고로 기업에서 사용하면, 유료이다.



2. 실행하기


MobaXterm Portable 프로그램을 실행하는 방법에 대해서 소개하도록 하겠다.



그림 4. MobaXterm Personal 20.6 버전


MobaXterm_Personal_20.6.exe를 실행하면 MobaXterm 프로그램을 실행할 수 있다.



3. 사용하기


MobaXterm을 실행하면 아래의 화면을 볼 수 있다.



그림 5. MobaXterm Personal 20.6 버전


Session을 클릭하면, 환경 설정 창이 뜬다.

SSH를 누른다.


[참고사항]

반드시 SSH만 되는 것이 아니고, RDP, Telnet, SFTP, VNC 등 다양한 클라이언트를 사용할 수 있다




그림 6. MobaXterm Personal 20.6 버전


Remote host의 아이피주소와 Specify username을 입력한다.

OK를 누르면 아래의 그림처럼 접속화면을 볼 수 있다.



그림 7. MobaXterm Personal 20.6 버전


그림 7은 접속한 모습이다.

이렇게 뜨면 잘 뜬 것이다.




4. 맺음글(Conclusion)


MobaXterm 프로그램 사용방법에 대해서 소개하였다.



5. 참고자료(References)


1. MobaXterm free Xserver and tabbed SSH client for Windows, https://mobaxterm.mobatek.net, Accessed by 2020-12-05, Last Modified 2020-12-05.

반응형
728x90
300x250

[PC활용] LibreCAD, BrlCAD 프로젝트 - 소개, 설치하기 (윈도우, 리눅스, MacOS)

 

LibreCAD 프로젝트에 대해서 소개하겠다.

LibreCAD는 범용 캐드 문서를 작성하는 프로그램이다.

 


1. LibreCAD - Free Open Source

 

LibreCAD의 프로젝트에 대해서 궁금하다면 아래의 사이트에 접속하면 된다.

http://librecad.org

 

 

그림 1-1. LibreCAD - LibreCAD.org

 


2. 프로젝트 소개

 

LibreCAD 프로젝트는 다음과 같이 소개할 수 있다.
https://librecad.org/#about

 

[LibreCAD / 리브레 캐드]

오픈 소스 2D-CAD

LibreCAD는 Windows, Apple 및 Linux 용 무료 오픈 소스 CAD 응용 프로그램이다
지원 및 문서화는 커다란 헌신적 인 사용자 커뮤니티, 공헌자 및 개발자 커뮤니티에서 무료로 제공된다.
당신도 참여할 수 있다!

 

[소개(About Us)]

[시작 방법]

LibreCAD는 Mechmate CNC 라우터와 함께 사용할 수 있도록 QCad 커뮤니티 버전에 CAM 기능을 구축하는 프로젝트로 시작되었다.
QCad CE는 오래된 Qt3 라이브러리를 중심으로 구축 되었기 때문에 Qt4로 포팅하여 추가적인 개선 작업을 수행해야 했다.
이로 인해 CADuntu가 생겨났다.

이 프로젝트는 이름이 부적절하다고 커뮤니티가 결정하기 몇 달 전에 CADuntu로 알려졌다.
커뮤니티 내의 토론과 기존 이름 연구를 통해 CADuntu는 LibreCAD로 이름이 바뀌었다.
렌더링 엔진을 Qt4로 포팅하는 것은 큰 일 이었으므로 LibreCAD는 처음에는 여전히 Qt3 지원 라이브러리에 의존했다.
Qt4 포팅은 마스킹 개발자 Rallaz 덕분에 2.0.0 시리즈 개발 과정에서 완료되었으며 LibreCAD는
Qt3은 1.0.0 시리즈를 제외하고 무료이다.

한편, LibreCAD 2.2.0 시리즈에서는 Qt5가 필수이다.

 

 [LibreCAD 기능]

 LibreCAD는 기능이 풍부하고 성숙한 2D-CAD 응용 프로그램으로 몇 가지 큰 장점이 있다.
 LibreCAD is a feature-packed and mature 2D-CAD application with some really great advantages:

 [완전하고 완전히 무료]
 시련, 구독, 라이선스 비용 또는 연간 요금에
 대해 걱정할 필요가 없다.

 [오픈 소스 및 GPLv2]
 숙련된 팀에 의해 개발되고 멋진 커뮤니티가
 지원하는 LibreCAD는 무료로 해킹하고
 복사 할 수 있다.

 [언어 장벽 없음]
 MacOS, Windows 및 Linux에 대한
 크로스 플랫폼 지원을 통해 30 개 이상의
 언어에서 사용할 수 있다.

 

[LibreCAD 다운로드] 

 

 

 

 

 

 

 [맥 OS]
 macOS 배포에 도움이 필요합니다.

 - SourceForge의
최신 안정적인
   DMG 패키지를 찾기
   1) https://sourceforge.net/projects/librecad/
    files/OSX/


 - GitHub의 최신 안정적인 DMG 패키지 찾기
 1) https://github.com/LibreCAD/LibreCAD/
    releases

 [Windows]

 - SourceForge의 최신 안정적인 EXE 설치
 프로그램을 찾으십시오.

 출혈 가장자리 버전을위한 자동화 된
 야간(Nightly, 또는 최근으로 의역함.)
 설치 관리자.
 1) https://sourceforge.net/projects/librecad/
 files/Windows/


 - GitHub의 최신 안정적인 EXE 설치 프로그램을
 찾으십시오.
또한 베타 테스트 버전을 위한
 특별 사전 설치 프로그램 설치 프로그램.
 1) https://github.com/LibreCAD/LibreCAD/
     releases

 리눅스[Linux]

 LibreCAD를 사용할 수있는 경우 배포판
 기본 패키지 관리자를 확인하십시오.

 그러나 버전이 조금 더 오래 될 수 있다.

 데비안 / 우분투 배포판의 경우,
 런치 패드 PPA use를 안정적이거나
 일일 버전으로 사용할 수 있다.

 1) https://launchpad.net/~librecad-dev


 

 LibreCAD 커뮤니티 가입

 LibreCAD 팀은 소수의 헌신적인 사람들이다.
 많은 일들이 진행되었지만 많은 버그와 기능이 아직 해결되기를 기다리고 있다.
 
 어떻게 도와 드릴까요?
 
 코더, 작가, 테스터, 번역가인 사람들이 필요하다.

 오픈소스 커뮤니티는 역동적인 것이다.
 사람들은 자신의 사적인 상황으로 몰아서 이동하거나 참여를 멈춘다.
 그래서 우리가 사용할 수있는 기존 리소스가 있거나 다른 프로젝트가 특정 영역에서 수행하는 작업을 알고 있거나
중요한 일,
 최선을 다하는 일을 하고 즐겁게 일하십시오!


 기여하려면 평생 계약에 서명할 필요가 없습니다.
 하나 이상의 패치를 적용하거나 포럼에서 다른 사람들을 도우면 wiki를 설치하거나 광범위한 사용자층이 귀하의 작업에 감사드린다.

 우리 공동체에 가입하여 원하는대로 기여하시오.

 개발 중(Developing)

 C++에서 뛰어난 개발자, 초보자라면
 모든 도움을 받을 수 있다.

 
 약간의 결정, IRC 채널, Zulip 채팅 및
 Libre-CAD-dev 메일링리스트를 통해 우리는
 여러분이 시작하고 진행하는 것을 도울 수 있다.

 필요한 것은 위에서 다운로드 섹션과 상단 링크
 linked에 링크되어 있다.

 https://librecad.org/#download (다운로드 섹션)
 https://librecad.org/#home (상단 링크)

 문서(Document)

 개발자는 일반적으로 문서를 만드는 것이
 좋지 않으므로 문서를 만드는 것을
 좋아한다면 위대하다!


 문서화가 필요한 2.1 시리즈의 광범위한
 GUI 변경 사항이 있다.


 번역(Translation)

 LibreCAD를 현지화하는 데 도움을 주며,
 현재 30 개 이상의 언어를 지원한다.


 번역 서버는 여기에 있다 :   https://translate.librecad.org/


 새로운 언어를 완성하거나 포럼에서
 새로운 언어에 대한 번역을 만들 것을
 요청할 수 있다.

 http://forum.librecad.org/LibreCAD-translate-f5710645.html

 

 LibreCAD Friends and Sponsors(리브레 캐드 친구들과 후원자들)

 As a non-profit, community driven open source project LibreCAD is dependent to have good relations to friends and sponsors.
 비영리 커뮤니티 주도의 오픈소스 프로젝트 인 LibreCAD는 친구 및 스폰서와 좋은 관계를 유지해야 한다.

 Friends(친구들)

 Sponsers(후원자들)

 BRL-CAD
 


 BRL-CAD(https://brlcad.org)는 대화식 지오메트리 편집, 렌더링 및
 기하학적 분석을 위한 고성능 레이 트레이싱, 시스템 성능
 분석 벤치 마크 슈트, 애플리케이션 개발자를 위한
 지오메트리 라이브러리 및 30년 이상의 강력한 오픈 소스 크로스
 플랫폼 솔리드 모델링 시스템이다.
 

 

 

 

 JetBrains은 LibreCAD 개발을 위해 CLion 라이센스를 아낌없이
 제공했다.
 
 이 강력한 IDE를 사용하면 Linux, OS X 및 Windows에서 C 및 C++로
 개발하고 스마트 에디터, 코드 품질 보증, 자동화 리팩토링 및
 CMake 빌드 시스템과의 긴밀한 통합으로 생산성을 향상시킬 수
 있다.

 https://www.jetbrains.com/clion/

 

BrlCAD의 https에 관한 것: BrlCAD 사이트 자체를 SSL 루트 기관으로 운영함. 웹 브라우저에서만 지정된 인증기관이 아님.

 

 

그림 2-1. HTTPS 루트 서버: brlCAD.org

 


4. 개발자를 위한 리브레CAD

 

개발자를 위한 리브레 CAD 프로젝트이다.

 

https://github.com/LibreCAD/LibreCAD

 

 

그림 4-1. 개발자를 위한 LibreCAD 프로젝트

 

 

그림 4-2. 개발자를 위한 LibreCAD 프로젝트

 

https://launchpad.net/~librecad-dev/+archive/ubuntu/librecad-daily

 

 

그림 4-3. 런치패드에서의 LibreCAD 프로젝트 - 도도(Dodo)

 


5. BrlCAD 프로젝트 - 후원사 없음.(No Sponser)

 

https://www.brlcad.org에 접속할 수 있다.

BrlCAD의 소개이다.

 

크로스 플랫폼(Cross Platform)

OO에 의해 신뢰받는다. (Trusted by OOOOO)

 이 패키지는 광범위하게 크로스 플랫폼이되도록 고안되었으며 BSD,
 Linux, Solaris, Mac OS X 및 Windows를 포함한 많은 공통 운영 체제
 환경에서 활발히 개발되고 유지 관리된다.
 BRL-CAD는 바이너리 및 소스 코드 형식으로 배포된다.

BRL-CAD는 OOO의 선택이다.
20 년 이상 동안 BRL-CAD는 취약성 및 치사 성 분석을 위해
무기 시스템을 모델링하기 위해 OOO에서 사용하는 주요 3중 서비스
솔리드 모델링 CAD 시스템이었다.

1979년 이후(Since 1979)

 무료 & 열기(Free & Open)

 Mike Muuss는 1979 년에 BRL-CAD의 초기 아키텍처와 디자인을
 시작했다. 1983 년에 통합 패키지로 개발되다.
 1984년에 처음 공개되었다.
 BRL-CAD는 2004 년 12 월 21 일 오픈 소스 프로젝트가 되었다.

 BRL-CAD는 자유를 존중하므로 OSI에서 승인 한 라이센스 조항에 따라
 코드가 오픈 소스이므로 필요에 따라 소프트웨어를 사용자 정의
 할 수 있다.
 또한 이 소프트웨어를 무료로 사용할 수 있으며, 모든 업데이트 또는
 지원
 비용을 청구하지 않는다.

 

 

그림 5-1. BrlCAD 프로젝트 소개 - 도도(Dodo)

 

 

 

 

그림 5-2. BrlCAD 프로젝트 소개 - 도도(Dodo)

 

 

그림 5-3. Brl-CAD Download - 도도(Dodo)

그림 5-3의 사이트에 접속하려면 아래의 링크를 클릭하면 된다.

https://brlcad.org/d/download/

 


5-1. 소스코드

 

https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/

 

 

그림 5-1-1. 소스포지의 BrlCAD - 도도(Dodo)

 

아래의 링크를 클릭하면, 7.26.4 소스코드를 살펴볼 수 있다.

https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/7.26.4/ 

 

 

 

그림 5-1-2. 소스코드 / BrlCAD - 도도(Dodo)

 

 

 


6. 윈도우에서 설치하기(리브레CAD)

 

윈도우에서 리브레CAD를 설치하는 방법에 대해서 소개하겠다.

 

아래에 있는 소스포지 사이트에 접속한다.

https://sourceforge.net/projects/librecad/

 

그림 6-1. SourceForge.net (소스포지 - 리브레 캐드) - 도도(Dodo)

 

아래의 그림은 LibreCAD를 다운로드 받는 모습이다.

 

 

 

그림 6-2. LibreCAD 다운로드 받기

 

 

그림 6-3. 리브레 캐드 설치하기 - 도도(Dodo)

 

 

그림 6-4. 리브레 캐드 설치하기 - 도도(Dodo)

 

 

그림 6-5. 리브레 캐드 설치하기 - 도도(Dodo)

 

 

그림 6-6. 리브레 캐드 설치하기 - 도도(Dodo)

 


6-1. 리브레 캐드 실행하기(MS윈도우)

 

리브레 캐드는 처음에 실행하면 다음과 같은 화면이 열린다.

 

 

그림 6-1-1. 리브레 캐드 실행하기 - 도도(Dodo)

 

 

그림 6-1-2. 리브레 캐드 실행하기 - 도도(Dodo)

 

 

그림 6-1-3. 리브레 캐드 실행하기 - 도도(Dodo)

 

 

그림 6-1-4. 리브레 캐드 실행하기 - 도도(Dodo)

 

 

영상 1. 리브레CAD 시연 - 도도(Dodo)

 

 

영상 2. 동작시연 - 도도(Dodo)

 


7. 리눅스에서 설치하기(리브레CAD)

 

리눅스에서 리브레CAD 사용하는 방법에 대해서 소개하겠다.

 

번호

명령어(Command)

설명(Description)

비고(Remarks) 

1

sudo -i

관리자 권한 탈취

 

2

sudo apt install librecad*

libreCAD 설치

 

 

 

 

그림 7-1. libreCAD 설치하기 - 도도(Dodo)

 

 

그림 7-2. libreCAD 설치하기 - 도도(Dodo)

 


7-2. LibreCAD 실행하기

 

LibreCAD를 실행하는 방법에 대해서 소개하겠다.

 

번호

사용 프로그램

작성일자(Created Date)

비고(Remarks)

1

Microsoft Windows 10

2018-08-31

 

2

Oracle VirtualBox 5.2(GNU/GPLv2)

2018-08-31

 

3

Ubuntu (Lubuntu 18.02)

2018-08-31

리눅스 커널 Kernel 4.15.0.20 Generic

 

 

 

 

그림 7-2-1. libreCAD 실행하기 - 도도(Dodo)

 

 

그림 7-2-2. libreCAD 실행하기 - 도도(Dodo)

 

 

그림 7-2-3. libreCAD 실행하기 - 도도(Dodo)

 

 

그림 7-2-4. libreCAD 실행하기 - 도도(Dodo)

 

 

그림 7-2-5. libreCAD 실행하기 - 도도(Dodo)

 

 

그림 7-2-6. libreCAD 실행하기 - 도도(Dodo)

 

 


8. MacOS 설치하기

 

맥OS 관련 장치(Device)가 없는 관계로 링크만 올려놓는다. 리눅스랑 윈도우랑 큰 차이가 없을 것으로 보인다.

 

 

 

그림 8-1. LibreCAD GPLv2 / 소스포지 사이트(SourceForge.net) - 도도(Dodo)

 

https://sourceforge.net/projects/librecad/files/OSX/

 

 

그림 8-2. LibreCAD / MacOS - 도도(Dodo)

 

https://sourceforge.net/projects/librecad/files/OSX/2.1/2.1.3/

https://github.com/LibreCAD/LibreCAD/releases

 

 


9. BrlCAD 설치하기(Windows 계열)

 

BrlCAD를 설치하는 방법은 크게 간단하게 설치할 수 있다.

 

그림 9-1. BrlCAD 다운로드 - 도도(Dodo)

 

 

그림 9-2. BRL-CAD 설치하기 - 도도(Dodo)

 

 

그림 9-3. BRL-CAD 설치하기 - 도도(Dodo)

 

 

그림 9-3. BRL-CAD 설치하기 - 도도(Dodo)

 

 

그림 9-4. BRL-CAD 설치하기 - 도도(Dodo)

 

 

그림 9-5. BRL-CAD 설치하기 - 도도(Dodo)

 

 

그림 9-6. BRL-CAD 설치하기 - 도도(Dodo)

 

 

 

그림 9-7. BRL-CAD 설치하기 - 도도(Dodo)

 

 

 

그림 9-8. BRL-CAD 설치하기 - 도도(Dodo)

 

 

그림 9-9. BRL-CAD 설치하기 - 도도(Dodo)

 


9-1. BrlCAD 실행하기(Windows 계열)

 

 

그림 9-1-1. BrlCAD 구성 - 도도(Dodo)

 

아래의 그림은 BrlCAD의 Archer 7.26.0.이라는 프로그램이다.

 

[첨부(Attachment)]

brlCAD.zip

 

 

 

그림 9-10. BRL-CAD 실행하기 / (Archer) - 도도(Dodo)

 

아래의 그림은 BRL-CAD의 MGED 프로그램이다.

 

 

 

그림 9-11. BRL-CAD 실행하기 / (Mged) - 도도(Dodo)

 

아래의 그림은 BRL-CAD의 RtWizard이다.

 

 

그림 9-12. BRL-CAD / (RtWizard) 실행하기 - 도도(Dodo)

 


9-1. 시연하기(BRL-CAD) / (Windows 계열)

 

 

영상 1. BrlCAD 시연하기 - 도도(Dodo)

 

 

영상 2. BrlCAD 시연하기(Mged) - 도도(Dodo)

 


11. BrlCAD 메뉴얼 - 시연하기

 

BrlCAD 메뉴얼을 시연하겠다.

http://brlcad.org/wiki/Documentation

 

 

그림 11-1. BriCAD / Documentation - 도도(Dodo)

 

 

영상 3. BrlCAD MGED 시연 - 도도(Dodo)

 

 


12. 맺음글(Conclusion)

 

LibreCAD와 BrlCAD에 대해서 소개하였다.

 


13. 참고자료(Reference)

 

1. LibreCAD - Free Open Source, Last Modified, Accessed by 2018-08-31, https://librecad.org/

2. LibreCAD - Free Open Source, Last Modified, Accessed by 2018-08-31, https://librecad.org/#about

3. PPA named librecad-daily for librecad-dev : “librecad-dev” team, Last Modified, Accessed by 2018-08-31, https://launchpad.net/~librecad-dev/+archive/ubuntu/librecad-daily

4. GitHub - LibreCAD/LibreCAD: LibreCAD is a cross-platform 2D CAD program written in C++11 using the Qt framework., Last Modified, Accessed by 2018-08-31, https://github.com/LibreCAD/LibreCAD

5. LibreCAD/libraries at master · LibreCAD/LibreCAD · GitHub, Last Modified, Accessed by 2018-08-31, https://github.com/LibreCAD/LibreCAD/tree/master/libraries

6. Downloads | BRL-CAD, Last Modified, Accessed by 2018-08-31, https://brlcad.org/d/download/

7. BRL-CAD - Browse /BRL-CAD Source at SourceForge.net, Last Modified, Accessed by 2018-08-31, https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/

8. BRL-CAD - Browse / BRL-CAD Source/7.26.4 at SourceForge.net, Last Modified, Accessed by 2018-08-31, https://sourceforge.net/projects/brlcad/files/BRL-CAD%20Source/7.26.4/

9. LibreCAD -  Browse /OSX/2.1/2.1.3 at SourceForge.net, Last Modified, Accessed by 2018-08-31, https://sourceforge.net/projects/librecad/files/OSX/2.1/2.1.3/

10. LibreCAD - Browse /OSX at SourceForge.net, Last Modified, Accessed by 2018-08-31, https://sourceforge.net/projects/librecad/files/OSX/

11. BRL-CAD: Open Source Solid Modeling, Last Modified, Accessed by 2018-08-31, http://brlcad.org/

12. Downloads | BRL-CAD, Last Modified, Accessed by 2018-08-31, http://brlcad.org/d/download/

반응형
728x90
300x250

[PC활용] (SSH) Keygen 생성(Mingw64 - Bash, Git-SCM), (윈도우) 파일 숨김, 보이기

 

SSH - Keygen을 생성하는 방법에 대해서 소개한다.

그리고 윈도우 파일 숨김 및 보이기 기능에 대해서 간단하게 소개하겠다.


먼저 MINGW64를 편하게 설치하는 방법이 있다. 아래의 사이트에서 설치 작업을 수행할 수 있다.

 

사용 프로그램: Windows 7

 


1. Git-SCM 설치하기

 

 

그림 1-1. git-scm 홈페이지, 도도(Dodo)

 

그림 1-1과 같이 git-scm 사이트에 접속한다.

리눅스 기반에서는 그림 2-1처럼 간단한 명령과정을 수행하면 쉽게 작업을 진행할 수 있다.

하지만, 윈도우 환경에서는 몇 가지 프로그램을 설치해야만 사용이 가능하다.

 

참고로 이 사이트의 내용이 github 프로젝트와 다른 것처럼 보이지만 실제로는 같은 이야기를 담고 있다.

 

git-scm은 Github에서 사용할 수 있는 클라이언트에 관한 것을 말한다.

 

 

그림 1-2. git-scm, Download 웹 사이트, 도도(Dodo)

 

그림 1-2는 git-scm을 설치하는 방법에 대해서 소개하고 있다.

크게 어렵지 않다.

 

cilck here to download manually를 클릭하면, github의 git 프로젝트 사이트로 이동한다.

 


2. MINGW64 - SSH Keygen

 

 

그림 2-1. SSH 생성하기, 도도(Dodo)

 

$ ssh-keygen

 

ssh-keygen을 이처럼 간단한 명령어로 생성할 수 있다.

 


3. 폴더 옵션으로 숨긴 파일 보이게 하기

 

 

그림 3-1. 숨김 파일 보이기, 도도(Dodo)

 

그림 3-1은 숨김 파일을 보이게 하는 기능이다.

옵션을 체크해제하면 보여지는 기능이다.

 

그림 3-2. ssh-keygen의 생성한 파일, 도도(Dodo)

 

실제로 사용자 컴퓨터 환경에 맞는 ssh-keygen이 생성되었다.

이 Keygen으로 github 서비스에서 사용할 수도 있다.

 

 


4. 참고자료(Reference)

 

1. "Git for Windows · GitHub", https://github.com/git-for-windows, Accessed by 2018-08-04

2. "Git - Downloading Package",  https://git-scm.com/download/win, Accessed by 2018-08-04

반응형
728x90
300x250

[Windows 10] Installation to Windows 10(윈도우 10 설치하기)

 

윈도우 10 설치하는 방법에 대해서 소개한다.

 

* 소프트웨어 구분: 상용 소프트웨어

 


1. 설치방법

 

Press any key to boot from CD or DVD가 나오면 아무키나 누른다.

 

 

그림 1-1. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-2. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-3. 윈도우 10 - 설치하기, 도도(Dodo)

 

다음을 클릭한다.

 

 

그림 1-4. 윈도우 10 - 설치하기, 도도(Dodo)

 

지금 설치(I)를 누른다.

윈도우 10의 설치 기능에서 "시스템 복구"를 누르면 복원도 가능하다. 단, 백업 이미지가 있으면 가능하다.

 

 

그림 1-5. 윈도우 10 - 설치하기, 도도(Dodo)

 

시디키 입력창이 뜬다. 제품키가 있는 경우에는 입력하고, 제품키가 없는 경우에는 "제품 키가 없음(I)"를 클릭한다.

 

 

그림 1-6. 윈도우 10 - 설치하기, 도도(Dodo)

 

운영체제를 선택한다.

 

 

 

그림 1-7. 윈도우 10 - 설치하기, 도도(Dodo)

 

동의함에 체크하고 다음(N)을 누른다.

 

 

그림 1-8. 윈도우 10 - 설치하기, 도도(Dodo)

 

업그레이드(U)와 사용자 지정(C) 설치가 있다.

업그레이드의 경우에는 "기존 윈도우가 설치되어 있어야 하고, 이전의 버전이어야 한다. 그리고 업그레이드 대상 버전의 윈도우를 사용해야만 한다"라는
제약조건이 있다.

사용자 지정(C) 설치를 누른다.

 

 

그림 1-9. 윈도우 10 - 설치하기, 도도(Dodo)

 

새로 만들기(E)를 클릭한다.

 

 

그림 1-10. 윈도우 10 - 설치하기, 도도(Dodo)

 

용량 크기를 지정하고 적용(P)를 클릭한다.

 

 

그림 1-11. 윈도우 10 - 설치하기, 도도(Dodo)

 

확인을 누른다.

 

 

그림 1-12. 윈도우 10 - 설치하기, 도도(Dodo)

 

디스크를 선택한다. 그리고 다음(N)을 클릭한다.

 

 

그림 1-13. 윈도우 10 - 설치하기, 도도(Dodo)

 

설치가 진행되는 모습을 살펴볼 수 있다.

 

 

그림 1-14. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-15. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-16. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-17. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-18. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-19. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-20. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-21. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-22. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-23. 윈도우 10 - 설치하기, 도도(Dodo)

 

약 재부팅이 2번 정도 된다. 재부팅 후 기다린 화면이다. 해당 국가 언어를 선택한다.
그리고 "예"를 클릭한다.

 

 

그림 1-24. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-25. 윈도우 10 - 설치하기, 도도(Dodo)

 

자판기의 배열을 클릭한다.
큰 의미가 최근에는 없는 듯하다.

"Microsoft 입력기"를 클릭 후 "예"를 클릭한다.

 

예전에는 2벌식, 3벌식 키보드가 있었다고 한다.

 

 

 

그림 1-26. 윈도우 10 - 설치하기, 도도(Dodo)

 

레이아웃이 특별하게 선택할 게 없다면 "건너뛰기"를 누른다.

 

 

그림 1-27. 윈도우 10 - 설치하기, 도도(Dodo)

 

기다리도록 한다.

 

 

그림 1-28. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-29. 윈도우 10 - 설치하기, 도도(Dodo)

 

개인용 설정과 조직용 설정이 뜬다.
이것도 큰 의미는 없긴 하다. 개인용 설정을 누른다.

 

 

그림 1-30. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-31. 윈도우 10 - 설치하기, 도도(Dodo)

 

윈도우 8.1 설치에서도 유사한 화면을 경험했을 것이다.

차이점은 오프라인 계정(윈도우 자체 계정)을 생성할 수 있도록 해놨다.

오프라인 계정을 누른다면, 윈도우 자체 계정을 생성할 수 있다.

 

MSN 계정을 생성하여 윈도우 로그인을 하고 싶은 경우에는 로그인을 해도 무방하다.

 

오프라인 계정을 누른다.

 

 

그림 1-32. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-33. 윈도우 10 - 설치하기, 도도(Dodo)

 

계정명을 입력한다.

 

 

그림 1-34. 윈도우 10 - 설치하기, 도도(Dodo)

 

암호를 넣고 싶은 경우에는 입력하고, 넣기 싫은 경우에는 다음을 클릭한다.

 

 

그림 1-35. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-36. 윈도우 10 - 설치하기, 도도(Dodo)

 

음성인식 옵션 등이 있다. 수락을 누른다.

물론 사용하기 싫은 경우에는 "아니오" 등을 체크할 수 있다.

 

 

그림 1-37. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-38. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-39. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-40. 윈도우 10 - 설치하기, 도도(Dodo)

 

윈도우 10 설치가 완료되었다.

네트워크에 관한 질문이 오른쪽에 뜬다.

 

큰 의미는 없다. 회사 네트워크 또는 공용 네트워크 등.

기능상 차이이지 다시 재설정을 해서 바꿀 수도 있다.

 

아니오를 누른다.

 


2. 윈도우 설치 후 드라이버 설치할 것

 

 

그림 2-1. 윈도우 10 - 설치하기, 도도(Dodo)

 


3. 윈도우 10을 다운받고 싶다면

 

윈도우 10을 다운받고 싶다면, 아래의 사이트에 접속해서 다운 받을 수도 있다.

https://www.microsoft.com/ko-kr/software-download/windows10, Accessed By 2018-07-31

 


4. 윈도우 10 요구사항

 

디스플레이:  800x600


PC 또는 태블릿에서 Windows 10으로 업그레이드하려면 최소한 다음과 같은 사양을 갖춘 하드웨어가 필요하다.
업그레이드 가능 여부에 영향을 미치는 추가 요소를 알아보려면 아래 내용을 읽어 봐라.

[최신 OS]
Windows 7 SP1 또는 Windows 8.1 Update의 최신 버전을 실행 중인지 확인해라.


어떤 버전을 실행 중인지 확인하고 싶은 경우 여기를확인해서 찾아봐라. 최신 버전을 다운로드하려는 경우 Windows 7 SP1용 또는 Windows 8.1 Update의 경우 여기를 클릭해라

 

프로세서

 1GHz 이상 프로세서 또는 SoC 

RAM

 1GB(32비트) 또는 2GB(64비트) 

하드 디스크 공간

 16GB(32비트 OS의 경우) 또는 20GB(64비트 OS의 경우) 

그래픽 카드

 DirectX 9 이상(WDDM 1.0 드라이버 포함) 

디스플레이

 800x600 

 


5. 참고자료(Reference)

 

1. https://www.microsoft.com/ko-kr/software-download/windows10, Accessed By 2018-07-31
2. https://www.microsoft.com/ko-kr/windows/windows-10-specifications#primaryR2, Accessed By 2018-07-31

반응형
728x90
300x250

[네트워크(Networks)] C#, C++, Java에서의 소켓 프로그래밍

이번에 소개할 것은 C#, C++, Java에서 소켓 프로그래밍을 사용하는 방법에 대해서 소개한다.


1. 소스코드

C#에서의 소켓 프로그래밍 작성 예시이다.
IPv4 환경에서 확인함.

운영체제: Microsoft Windows 10
소프트웨어: Visual Studio Community 2015

 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;

namespace Example
{
    class ServerSide
    {
        public string data = null;

        public void listenSocket()
        {
            byte[] buf;
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8088);

            server.Bind(ipEndPoint);
            server.Listen(10);

            System.Console.WriteLine("연결 요청(Connection Request)");

            // 클라이언트 연결 받음.
            Socket client = server.Accept();

            // 클라이언트의 데이터 - 보내기 / 받기
            buf = new byte[1024];
            client.Receive(buf);

            System.Console.WriteLine(Encoding.Default.GetString(buf));

        }
    }

    class ClientSide
    {
        public void listenSocket()
        {
            //IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            //IPAddress ipAddress = ipHostInfo.AddressList[0];
            // IPEndPoint ipep = new IPEndPoint(ipAddress, 8088);

            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8088);
            String buf;
            Byte[] data;
           
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect(ipep);

            Console.WriteLine("소켓 연결(Socket connect)");

            // 데이터 자료 바이트 형으로 받아오기
            data = new byte[1024];
            client.Receive(data);

            // 형 변환 -> getString() 형으로 인코딩
            buf = Encoding.Default.GetString(data);

            Console.WriteLine(buf);

            buf = "소켓 접속 확인 됐습니다.";
            data = Encoding.Default.GetBytes(buf);

            client.Send(data);
            client.Close();

            Console.WriteLine("아무 키나 눌러주세요.");
            Console.ReadLine();

        }
    }
}
 

 NetworkSide.cs

 

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace Example
 {
       class Program
       {
               static void Main(string[] args)
               {
                       ServerSide serverside = new ServerSide() ;
                       serverside.listenSocket();
               }
       }
 } 

Program.cs

[첨부(Attachment)]
network_csharp.7z


2. (Gpp)C++에서의 소켓 프로그래밍 작성 예시입니다. (리눅스에서만 가능)

C언어로 구현된 소켓 프로그래밍을 C++에서도 지원이 가능한 형태로 제작하였다.
IPv4 기반에 맞춰 작성함.

 

 

 

운영체제: 우분투(Ubuntu 16.04)
소프트웨어: Gpp, Gcc

 

 

/*
 *   Network.h
 */

 #include <iostream>
 #include <unistd.h>
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <arpa/inet.h>

 using namespace std;

 #ifndef SERVER_H_
 #define SERVER_H_

 // 0.
 class INetwork{
       virtual void listenSingleSocket() = 0;
 };

 // 1. 서버사이드(Server-Side)
 class Server : public INetwork{

 protected:

 private:
     int welcomeSocket, newSocket;

 public:
     Server(){
            this->welcomeSocket = 0;
            this->newSocket = 0;
     }

     void listenSingleSocket(){

           char buffer[1024];
           struct sockaddr_in serverAddr;
           struct sockaddr_storage serverStorage;
           socklen_t addr_size;

           welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);

           serverAddr.sin_family = AF_INET;
           serverAddr.sin_port = htons(8000);
           serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

           int i = 0;

           while(i < sizeof(serverAddr.sin_zero) ){
                 serverAddr.sin_zero[i] = '\0';
                 i++;
           }

           bind(welcomeSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr) );

           if ( listen(welcomeSocket, 5) == 0 ){
                  cout << "Listening\n";
           }
           else
          {
                 cout << "Error\n";
          }

           addr_size = sizeof(serverStorage);
           newSocket = accept(welcomeSocket, (struct sockaddr *) &serverStorage, &addr_size);

           buffer[0] = 'H';
           buffer[1] = 'e';
           buffer[2] = 'l';
           buffer[3] = 'l';
           buffer[4] = 'o';

           send(newSocket, buffer, 13, 0);

     }

 };

 class Client : public INetwork{

 private:
         int clientSocket;
         char buffer[1024];
         struct sockaddr_in serverAddr;
         socklen_t addr_size;

 public:
         Client(){
               this->clientSocket = 0;
         }

         void listenSingleSocket(){

              clientSocket = socket(PF_INET, SOCK_STREAM, 0);

               serverAddr.sin_family = AF_INET;
               serverAddr.sin_port = htons(8000);

               serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

               int i = 0;
               while (i < sizeof(serverAddr.sin_zero)){
                      serverAddr.sin_zero[i] = '\0';
                       i++;
               }

                addr_size = sizeof(serverAddr);

                connect(clientSocket, (struct sockaddr *) &serverAddr, addr_size);

                // 문자열 전달 받음 - (unsigned) char[1024]
                recv(clientSocket, buffer, 1024, 0);
                cout << "데이터 전송 받은 문자:" << buffer << endl;
          }

};

#endif /* SERVER_H_ */

 Network.h

 #include <iostream>
 #include "Network.h"

 using namespace std;

 int main() {
        /*
        Server *server = new Server();
        server->listenSingleSocket();
        */

       Client *client = new Client();
       client->listenSingleSocket();
       return 0;
 }

 Program.cpp

[첨부(Attachment)]
Network-gpp.zip


3. 자바에서의 소켓 프로그래밍

싱글 쓰레드 타입으로 작성함. IPv4 환경에서 확인하였다.
IPv6는 확인하지 못함.

 

 

 

운영체제: Microsoft Windows 10 
소프트웨어: Eclipse Luna, JDK 1.81

 

 
 package Network;

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.net.Socket;
 import java.net.UnknownHostException;

 public class ClientSide implements IHost{
 
        private Socket socket;
        private Host host;
 
        public ClientSide(){
            socket = null;
            host = null;
        }
 
        public Host getHost(){
            return host;
        }
 
        public void setHost(Host host){
            this.host = host;
        }
 
        public void listenSocket(){
  
            InputStream in = null;
            OutputStream out = null;
  
            BufferedReader br = null;
            BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter pw = null;
  
            String myMsg = null;  // 전달 메시지
            String echo = null;  // 받은 메시지
  
            try{
                 socket = new Socket( host.getIP() , host.getPort() );
    
                 in = socket.getInputStream();
                 out = socket.getOutputStream();
   
                 pw = new PrintWriter(new OutputStreamWriter(out));
                 br = new BufferedReader(new InputStreamReader(in));
   
                while((myMsg = input.readLine()) != null){
    
                      if ( myMsg.equals("/q")){
                            break;
                      }
    
                      pw.println(myMsg);
                      pw.flush();
    
                      echo = br.readLine();
                      System.out.println( "서버사이드 받은 메시지:" + echo );
     
                }
   
                pw.close();
                br.close();
                socket.close();
   
        }
        catch(UnknownHostException e){
                System.out.println("미확인 호스트: " + host.getIP() + ":" + host.getPort() );
                System.exit(-1);
        }
        catch(IOException e){
                System.out.println("입출력 안됨.");
                System.exit(1);
        }

    }
 
}

 ClientSide.java

 
 package Network;

 interface IHost{
        void setHost(Host host);
        Host getHost();
 }

 public class Host{
 
        private String ip;
        private int port;
 
        public Host(int port){
              ip = "";
              this.port = port;
        }
 
        public Host(String ip, int port){
                this.ip = ip;
                this.port = port;
        }
 
        public String getIP(){
                return this.ip;
        }
 
        public int getPort(){
                return this.port;
        }
 
 }

 Host.java

 
 package Network;

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.net.ServerSocket;
 import java.net.Socket;

class ClientWorker implements Runnable{

         private int id;
         private Socket client;
         private String line;
 
         public ClientWorker(Socket client, int id){

              this.client = client;
              this.id = id;
         }
 
         public void run() {
  
             InputStream in = null;
             OutputStream out = null;
  
             PrintWriter pw = null;
             BufferedReader br = null;
  
             String recvStr = "";

             try{
                 in = client.getInputStream();
                 out = client.getOutputStream();
   
                 pw = new PrintWriter(new OutputStreamWriter(out));
                 br = new BufferedReader(new InputStreamReader(in));
   
             }catch(IOException e){
                 System.out.println("읽기 실패(Read Failed)");
                 System.exit(-1);
             }

             try {
   
                  while( (recvStr = br.readLine() ) != null ){
    
                        appendText(recvStr);
                        System.out.print( "쓰레드(Thread)" + id + ":" );
                        System.out.println(line);
                        pw.println(recvStr);
                        pw.flush();
                  }
   
                  client.close();
   
             } catch (IOException e) {
                   System.out.println("읽기 실패(Read Failed");
                   System.exit(-1);
             }
  
       }
 
        // 동기화 추가
        public synchronized void appendText(String strText){
  
              if ( line == null )
              {
                   line = strText;
              }
              else{
                   line = line + strText;
              }
        }
 
 }

 public class ServerSide implements IHost{

         private ServerSocket server;
         private Socket client;
         private Host host;
         private static int clientID;
 
         public ServerSide(){
                server = null;
                client = null;
                host = null;
                clientID = 0;
         }
 
         public Host getHost(){
                return host;
          }
 
          public void setHost(Host host) {
                 this.host = host;
          }
 
          // 싱글(Single)
          public void listenSingleSocket(){

                String line;
   
                InputStream in = null;
                OutputStream out = null;
  
                PrintWriter pw = null;
                BufferedReader br = null;
  
                String recvStr = null;
  
                try{   
                      server = new ServerSocket( host.getPort() ); 
                }
                catch(IOException e){
                      System.out.println("포트 " + host.getPort() + "번은 응답하지 않습니다.");
                      System.exit(-1);
                }
  
                try{
                      client = server.accept();
                }
                catch(IOException e){
                      System.out.println("응답 실패: 포트 " + host.getPort() + "번");
                      System.exit(-1);
                }
  
                try{
                      in = client.getInputStream();
                      out = client.getOutputStream();
   
                      pw = new PrintWriter(new OutputStreamWriter(out));
                      br = new BufferedReader(new InputStreamReader(in));
   
                }catch(IOException e){
                      System.out.println("읽기 실패(Read Failed)");
                      System.exit(-1);
                }

                try {
   
                     while( (recvStr = br.readLine() ) != null ){
     
                            System.out.print( "싱글" );
                            pw.println(recvStr);
                            pw.flush();
                    }
   
                   client.close();
                   server.close();
   
              } catch (IOException e) {
                     System.out.println("읽기 실패(Read Failed");
                     System.exit(-1);
              }
  
         }

        // 멀티(Multi-Threading)
        public void listenMutliSocket(){
   
              ClientWorker w = null;

              try{
                  server = new ServerSocket( host.getPort() ); 
              }
              catch(IOException e){
                  System.out.println("포트 " + host.getPort() + "번은 응답하지 않습니다.");
                  System.exit(-1);
              }
  
              try{
                   while(true){
   
                        w = new ClientWorker( server.accept(), clientID++ );
  
                        Thread t = new Thread(w);
                        t.start();
                   }
   
             }
             catch(IOException e){
                  System.out.println("응답 실패: 포트 " + host.getPort() + "번");
                  System.exit(-1);
             }
  
       }
  
       protected void finalize(){
  
             try{
                  server.close();
             }catch(IOException e){
                  System.out.println("소켓을 종료할 수 없습니다.");
                  System.exit(-1);
             }
  
       }

 }

 ServerSide.java

 package Network;

 public class Example{
 
        public static void main(String[] args){
  
             ServerSide server = new ServerSide();
             Host host = new Host(10001);
             server.setHost(host);
             server.listenMutliSocket();
        }
 }

 Example.java

[예제 - 첨부(Attachment)]
Network.zip


4. IPv4와 IPv6

 

네트워크와 관련된 주제로 IPv4와 IPv6에 대해서 소개한다.

 4-1. IPv4 

 IPv4는 인터넷 프로토콜의 4번째 판이며, 전 세계적으로 사용된 첫 번째 인터넷 프로토콜이다.

 과거에 인터넷에서 사용되는 유일한 프로토콜이였으나 오늘날에는 IPv6이 대중화되었다. IETF RFC 791(1981년 9월)에 기술되어 있다.

 IPv4는 패킷 교환 네트워크 상에서 데이터를 교환하기 위한 프로토콜이다. 데이터가 정확하게 전달될 것을 보장하지 않고,
 중복된 패킷을 전달하거나  패킷의 순서를 잘못 전달할 가능성도 있다. 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인
 TCP에서(그리고 UDP에서도 일부) 보장한다.

 IPv4의 주소체계는 총 12자리이며 네 부분으로 나뉜다. 각 부분은 0~255까지 3자리의 수로 표현된다. IPv4 주소는 32비트로 구성되어 있으며,
 현재 인터넷 사용자의 증가로 인해 주소공간의 고갈에 대한 우려가 높아지고 있다. 이에 따라 대안으로 128비트 주소체계를 갖는 IPv6가 등장하였다.

 중국의 경우 주소공간 고갈을 우려하여 일부에서 독자적으로 IPv9(십진제 인터넷 주소체계)과 숫자도메인(Digital Domain Name System, DDNS)이
 결합된 개념인 IP 주소와 도메인 이름이 동일한 네트워크 체제인 All-Digital-Domain-Address (ADDA)를 사용하기도 한다.

 2011년 2월 4일부터 모든 IPv4 주소가 소진되어 IPv4의 할당이 중지되었다.

 

CLASS 구성 범위
A 클래스 xxx.xxx.xxx.xxx 1.0.0.1 ~ 126.255.255.254 61.211.123.22
B 클래스 xxx.xxx.xxx.xxx 128.0.0.1 ~ 191.255.255.254 181.123.211.33
C 클래스 xxx.xxx.xxx.xxx 192.0.0.1 ~ 223.255.255.254 221.23.222.222
D 클래스 224.0.0.0 ~ 239.255.255.255
E 클래스 240.0.0.0 ~ 254.255.255.254

 그림 4-1-1. 쿼드 점으로 구분 된 IPv4 주소 표현을 이진 값으로 분해.

 이건 조금 해결할 수는 있을 듯하다. 다만 이것도 계산이 더럽다고 볼 수 있다.
 아래는 172에 대해서 해결한 것이다.

10 |  10  |  110  | 0  

  10 = | Flag |
  128번 = 000000
  129번 = 000001

   .........
  172번 = 101100

 

 4-2. IPv6

 인터넷 프로토콜 버전 6 (IPv6)은 네트워크상의 컴퓨터에 대한 식별 및 위치 시스템을 제공하고 인터넷을 통해 트래픽을 라우팅하는
 통신 프로토콜 인 IP (인터넷 프로토콜)의 최신 버전이다.

 
IPv6는 오랫동안 예상되었던 IPv4 주소 고갈 문제를 해결하기 위해 IETF (Internet Engineering Task Force)에서 개발되었다.
 
IPv6은 IPv4를 대체하기 위한 것이다. IPv6는 1998 년 12 월에 초안 표준이되었고, 2017 년 7 월 14 일에 인터넷 표준이 되었다.

 인터넷상의 모든 장치에는 식별 및 위치 정의를 위해 고유 한 IP 주소가 할당된다.
 
1990 년대의 상용화 이후 인터넷의 급속한 성장으로 인해 IPv4 주소 공간보다 장치를 연결하는 데 훨씬 많은 주소가 필요할 것이다.

 
1998 년까지 IETF (Internet Engineering Task Force)는 후임 프로토콜을 공식화했다.
 
IPv6은 128 비트 주소를 사용하며 이론적으로 2128 개 또는 약 3.4 × 1038 개 주소를 허용한다.

 
여러 개의 범위가 특수 용도로 예약되었거나 완전히 사용되지 않도록 실제 숫자가 약간 더 작다.
 
가능한 IPv6 주소의 총 수는 32 비트 주소를 사용하고 약 43 억 개의 주소를 제공하는 IPv4의 7.9 × 1024 배이다.
 
 
이 두 프로토콜은 상호 운용성을 위해 설계되지 않았기 때문에 IPv6 로의 전환이 복잡해졌다.
 
그러나 IPv4와 IPv6 호스트 간의 통신을 허용하기 위해 몇 가지 IPv6 전환 메커니즘이 고안되었다.

 IPv6은 더 큰 주소 지정 공간 외에도 다른 기술적 이점을 제공한다.
 
특히 인터넷을 통한 경로 집계를 용이하게 하는 계층적 주소 할당 방법을 허용하므로 라우팅 테이블의 확장을 제한한다.
 
멀티 캐스트 주소 사용은 확장되고 단순화되며 서비스 제공을위한 추가 최적화를 제공한다.

 장치의 이동성, 보안 및 구성 측면이 프로토콜 설계시 고려되었다.

 IPv6 주소는 그룹이 콜론으로 구분 된 네 개의 16 진수 8 개의 그룹으로 표시된다.
 (예: 2001:0db8:0000:0042:0000:8a2e:0370:7334).이 전체 표기법을 줄이는 방법이 있다.

 

그림 4-2-1. IPv6 주소 표현을 이진 형식으로 분해

 IPv6를 사람 손으로 푼다고 하면, 매우 많은 노가다가 필요하다.
 각 옥탯에 있는 16진수를 일일이 하나 하나씩 해결해야 한다.

4-3. IPv6의 패킷헤더

 



그림 4-3-1. IPv6의 패킷해더

 IPv6의 패킷해더이다. IPv6로 데이터를 송수신하면 이런 형태로 전송이 되는 것을 관찰할 수 있다.
 리눅스에 패킷 분석 툴킷이 있는데 한번 패킷해더를 추적해봐도 좋을 것이다. 

 이 패킷해더를 관찰하는 대표적인 툴킷(Tool-kits)으로 WireShark가 있다.

  
 그림 4-3-2. WireShark 시연 예

 [IPv4 to IPv6에 관한 이야기]

 IPv6를 실제로 사용하려면 많은 조건이 필요하다.
 IPv4에서 IPv6로 변환해줄 수 있는 변환장치 등이 필요하다.
 터널링도 하나의 기법이 될 수 있다.


5. 참고자료(Reference)

 

1. IPv4, Wikipedia, https://ko.wikipedia.org/wiki/IPv4, Accessed by 2018-07-27
2. IPv6, Wikipeida, https://en.wikipedia.org/wiki/IPv6, Accessed by 2018-07-27
3. IPv6 OSPFv3 ESP Packets and Decrypting with Wireshark, https://packetpushers.net/ipv6-ospfv3-esp-packets-and-decrypting-with-wireshark/, Accessed by 2018-07-27

반응형
728x90
300x250

[Java] 행 바꾸기


자바에서 운영체제 별로 문장 행을 바꾸는 방법입니다.

 


1. 사용 방법

 

1. System.out.println()

2. System.out.print("\n");     // 유닉스 계열

3. System.out.print("\r\n"); // 윈도우 계열

 


2. 맺는말

 

JDK 버전에 따라서 달라질 수도 있습니다.

반응형
728x90
300x250

[MS Windows] 메모리 덤프(Memory Dump)가 생성되지 않을 때 확인 사항(Windows 7, 비스타)

 

메모리 덤프가 생성 되어야 디버깅을 통해 문제 원인을 파악할 수 있는데 간혹 블루스크린은 발생했으나 메모리 덤프가 생성되지 않는 경우가 있습니다. 이런 경우 설정상의 문제인 경우가 많은데 아래 내용을 참고해 확인해보시기 바랍니다.

 

1. 기본적으로 덤프가 생성될수 있는 설정인지 확인 합니다.
Memory Dump 를 발생시키기 위한 조건
     1. 제어판 - 시스템 - 고급 - 시작 및 복구
     2. 2GB 이상이라면 “커널 메모리 덤프” 로 설정하십시오.
     3. 기존 파일에 덮어쓰기 옵션이 선택되어 있는지 확인하십시오.
     4. %SystemRoot% 파티션에 Paging 파일이 존재해야 합니다.
     5. Paging 파일의 크기가 물리적인 메모리보다 최소한 1MB 이상 커야 합니다.
     6. 기본적으로 Memory Dump는 C:\Winnt(or C:\Windows)폴더에 저장됩니다.
         C 드라이브(Drive)에 디스크 공간이 충분히 있는지 확인하십시오.

 

2. H/W사에서 지원하는 ASR과 같은 설정을 Disable 합니다.
#그래도 덤프가 생성 되지 않는 다면 아래와 같이 문제를 확인 합니다.
1. 블루스크린 발생후 자동 재부팅(AutoReboot)을 Disable 하여 블루스크린 화면에서 재부팅 하지 않도록해 
    블루스크린에 나타난 코드를 확인한다.
 

    레지스트리에서 AutoReboot를 Disable하는 옵션
    - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
      AutoReboot : 0

2. 설정을 확인 해보았는데도 덤프가 생성되지 않는 경우 대부분 디스크 관련된 하드웨어나 드라이버의 확률이 높습니다.
    관련 Firmware와 드라이버를 업그레이드해 보시기 바랍니다.

 
반응형
728x90
300x250

[Networks] 장애 조치 및 장애 복구

서버 클러스터 보안에 대한 유용한 정보

서버 클러스터가 DoS(Denial-of-Service) 공격, 데이터 변조 및 기타 악의적인 공격의 피해를 입지 않도록 다음 지침을 참고하시기 바랍니다.

최신 소프트웨어 업데이트를 적용합니다.
보안 업데이트와 서비스 팩이 포함된 최신 소프트웨어 업데이트를 적용합니다. Windows Server 2003 서비스 팩 1(SP1)에는 개선된 보안 기능이 다수 포함되어 있습니다. Windows Server 2003 SP1 이상을 실행하는 Windows Server 2003 버전을 사용할 것을 적극 권장합니다.

보안에 관한 최신 정보를 구합니다.
수시로 Microsoft 웹 사이트에서 보안 관련 정보를 검토합니다. 예를 들어 다음 중 하나 이상을 검토합니다.

• Microsoft 웹 사이트(http://go.microsoft.com/fwlink/?LinkID=59992)(영문일 수 있음)에서 서버 보안에 관한 정보
 
• Microsoft 지원 웹 사이트(http://go.microsoft.com/fwlink/?LinkID=59993)(영문일 수 있음)에서 기술 자료 문서 891597, "Windows Server 2003 기반 클러스터 서버에서 보다 제한적인 보안 설정을 적용하는 방법"
 

신뢰할 수 있는 사용자만 서버 클러스터 및 관련 하부 구조 구성 요소에 물리적으로 액세스할 수 있도록 제한합니다.
권한이 부여된 사용자만 서버 클러스터 노드 및 관련 하부 구조 구성 요소(예: 네트워크 및 저장 장치 구성 요소)에 물리적으로 액세스할 수 있도록 합니다. 서버 보안을 위한 기본 정보에 대한 자세한 내용은 보안에 대한 유용한 정보를 참조하십시오.

클러스터 네트워크에 보안 조치를 취합니다.
공용 또는 혼합 네트워크: DNS 서버 또는 WINS 서버와 같은 하부 구조 서버를 비롯하여 클러스터 서브넷 또는 다른 서브넷에 연결된 모든 서버는 트러스트된 서버여야 하며 보안 조치를 취해야 합니다. 또한 방화벽을 사용하여 권한이 없는 클라이언트가 클러스터에 액세스하지 못하도록 해야 합니다.

개인 네트워크: 개인 네트워크는 다른 네트워크와 물리적으로 분리해야 합니다. 특히 라우터, 스위치 또는 브리지를 사용하여 개인 클러스터 네트워크를 다른 네트워크와 연결하지 말고, 개인 네트워크 서브넷에 다른 네트워크 하부 구조 또는 응용 프로그램 서버를 포함하지 마십시오.

다수의 권한 없는 사용자가 클러스터 네트워크에 액세스하여 개인 또는 혼합 네트워크를 통해 전달되는 하트비트 메시지가 중단될 경우 클러스터가 이러한 오류에 대해 반응함으로써 IP 주소 리소스 그룹뿐 아니라 클러스터 노드 상태에도 영향을 주게 됩니다. Microsoft Exchange Server에 연결된 리소스와 같이 중요한 클러스터 리소스에 대해 장애 조치가 반복적으로 수행되면 클라이언트에서 이 클러스터에 액세스하지 못할 수도 있습니다.

Windows 방화벽을 사용하는 경우 보안 구성 마법사를 사용하여 구성합니다.
보안 구성 마법사는 클러스터 노드에 Windows 방화벽을 구성하는 과정을 단순하게 해줍니다. 자세한 내용은 서버 클러스터에 Windows 방화벽 사용을 참조하십시오.

트러스트되고 안전한 컴퓨터에서만 원격으로 클러스터 노드를 관리합니다.
원격 컴퓨터의 보안이 취약할 경우 클러스터 관리 도구에 의해 신뢰할 수 없거나 악의적인 코드가 은밀히 시작되어 클러스터에 피해를 줄 수도 있습니다.

모든 노드에서 클러스터 서비스 계정을 로컬 관리자 그룹의 구성원으로 만듭니다. 그러나 도메인 구성원 그룹의 구성원으로 만들지는 마십시오.
클러스터 서비스 계정에 가능하면 최소한의 권한만 부여하여 계정이 노출될 경우 발생할 수 있는 보안 문제를 예방합니다. 클러스터 서비스 계정에 필요한 관리 권한 및 사용 권한에 대한 자세한 내용은 클러스터 서비스를 실행할 계정 변경을 참조하십시오.

클러스터 서비스 계정을 보호하기 위한 단계를 수행하고 클러스터 서비스 계정을 사용하여 클러스터를 관리하지 마십시오.
클러스터 서비스 계정은 관리 권한 및 사용 권한을 갖습니다. 계정 사용을 제한하고, 계정 이름과 암호를 아는 사람들의 수를 제한하며, 수시로 암호를 변경하십시오.

다른 사용자 계정을 사용하여 클러스터를 관리하는 방법에 대한 자세한 내용은 사용자 권한을 부여하여 클러스터 관리를 참조하십시오.

클러스터 서비스 계정에 필요한 권한 및 사용 권한에 대한 자세한 내용은 클러스터 서비스를 실행할 계정 변경을 참조하십시오.

중단 시간 없이 클러스터 서비스 계정의 암호를 변경하는 것에 대한 자세한 내용은 클러스터 서비스 계정 암호 변경을 참조하십시오.

클러스터의 클러스터 서비스 및 응용 프로그램에 다른 계정을 사용합니다.
이렇게 하면 응용 프로그램 계정이 노출되더라도 클러스터 계정은 보호할 수 있습니다. 또한 cluster.exe를 사용하여 클러스터 서비스 계정에 대한 암호를 변경하고 하나 이상의 응용 프로그램에서 해당 계정을 사용하면 클러스터 응용 프로그램이 제대로 작동하지 않을 수 있습니다. 자세한 내용은 클러스터 서비스 계정 암호 변경을 참조하십시오.

여러 클러스터에 서로 다른 클러스터 서비스 계정을 사용합니다.
이렇게 하면 클러스터 서비스 계정이 노출되더라도 한 클러스터만 노출됩니다.

클러스터에서 모든 노드를 제거한 다음 클러스터 서비스 계정을 제거합니다.
클러스터에서 모든 노드가 제거되어도 클러스터 관리 도구는 자동으로 클러스터 서비스 계정을 제거하지 않습니다. 클러스터 서비스 계정에는 높은 수준의 관리 및 사용 권한 권한이 있어 노출될 경우 보안 문제를 일으킬 수 있습니다. 따라서 사용하지 않을 때는 이 계정을 로컬 관리자 그룹에서 제거할 것을 적극 권장합니다. 그러나 클러스터 서비스의 관리 권한 및 사용 권한은 도메인 전체가 아닌 각 클러스터 노드에 로컬로 허용되므로 계정이 노출되면 해당 클러스터 노드만 영향을 받습니다. 사용자 계정 삭제에 대한 자세한 내용은 로컬 사용자 계정삭제를 참조하십시오.

Active Directory 도메인의 클러스터의 경우 네트워크 이름 리소스에 대한 Kerberos 인증을 사용할 수 있습니다.
Kerberos 인증은 또 다른 인증 방법인 NTLM 인증보다 훨씬 더 안전합니다. Kerberos 인증을 사용할 수 있는 경우 클러스터 서비스가 네트워크 이름 리소스에 대해 만든 계정 및 가능한 경우 클러스터 서비스 계정 자체에도 특정 권한 및 사용 권한을 추가해야 합니다. 자세한 내용은 Microsoft 지원 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=59994)에서 기술 자료 문서 307532, "컴퓨터 개체를 수정할 때 클러스터 서비스 계정의 문제 해결 방법"을 참조하십시오.

클러스터에서 보안 관련 이벤트를 감사합니다.
신뢰할 수 있는 사용자만 클러스터를 관리하는 권한을 갖도록 하고 권한 없는 사용자 계정이 추가되는 것을 추적하려면 로컬 관리자 그룹에 대한 변경 내용을 감사합니다. 기본적으로 서버 클러스터를 만들거나 노드를 추가할 때 클러스터 서비스 계정이 각 노드의 로컬 Administrators 그룹에 추가됩니다. 보안 이벤트 감사에 대한 자세한 내용은 보안 이벤트 감사를 참조하십시오.

클러스터 디스크의 파일이나 폴더 같은 공유 데이터에 대한 액세스를 제한하고 감사합니다.
공유 데이터에 대한 액세스를 감사하려면 모든 클러스터 노드에서 감사를 사용합니다. 자세한 내용은 클러스터에서 공유 데이터 보안을 참조하십시오.

클러스터 리소스에 대한 클라이언트 액세스를 제한합니다.
Windows Server 2003 제품군의 보안 기능을 사용하여 클러스터 리소스에 클라이언트 액세스 제한에 설명된 것과 같이 클러스터 리소스에 대한 클라이언트 액세스를 제어합니다. 클러스터 리소스에 대한 액세스를 제어할 사용자 및 그룹 계정을 만들 경우 로컬 계정이 아닌 도메인 수준 계정을 사용하여 현재 어떤 노드가 클러스터된 리소스를 소유하고 있는지에 관계 없이 적절한 액세스를 제공할 수 있게 합니다.

쿼럼 디스크에 대한 액세스를 제한하여 쿼럼 디스크에 항상 여유 공간이 충분하도록 합니다.
쿼럼 디스크를 무단으로 읽거나 쓰는 것을 방지하려면 클러스터 서비스 계정 및 로컬 관리자 그룹의 구성원에게만 쿼럼 디스크 액세스 권한을 부여할 것을 적극 권장합니다. 클러스터 서비스가 쿼럼 로그에 계속 기록할 수 있도록 하려면 쿼럼 디스크에 여유 공간이 충분해야 합니다. 쿼럼 디스크의 크기는 500MB 이상 되는 것이 좋습니다. 자세한 내용은 검사 목록: 서버 클러스터 계획 및 만들기와 디스크 리소스 보안을 참조하십시오.

클러스터에서 실행되는 모든 응용 프로그램은 신뢰할 수 있는 출처에서 제공 받은 것이어야 하며 클러스터 디스크에 대한 액세스는 클러스터 리소스로 관리되는 응용 프로그램으로만 제한되어야 합니다.
자세한 내용은 디스크 리소스 보안을 참조하십시오.

일반 스크립트 리소스가 호출하는 스크립트 파일에 보안 조치를 취합니다.
스크립트 파일의 실행 권한 및 이 스크립트에서 호출되는 API의 사용 권한에 대해 NTFS 파일 수준의 보안을 적용합니다. 자세한 내용은 클러스터 리소스에 클라이언트 액세스 제한을 참조하십시오.

일반 응용 프로그램 리소스가 호출하는 응용 프로그램은 신뢰할 수 있는 출처에서 제공 받은 것이어야 하며 해당 파일, 레지스트리 검사점 및 응용 프로그램에 필요한 기타 리소스는 안전한 위치에 보관되어야 합니다.
일반 응용 프로그램 리소스로 실행된 응용 프로그램은 관리 권한 및 사용 권한을 갖는 클러스터 서비스 계정의 컨텍스트 하에서 실행됩니다. 따라서 이러한 응용 프로그램이 신뢰할 수 있는 출처에서 제공받았는지 확인합니다. 또한 클러스터 관리자에서 일반 응용 프로그램 리소스의 매개 변수를 구성할 때 필요한 경우가 아니면 응용 프로그램이 데스크톱과 상호 작용을 선택하지 않는 것이 좋습니다. 자세한 내용은 클러스터 리소스에 클라이언트 액세스 제한을 참조하십시오.

클러스터를 원격으로 관리할 때 생성되는 클러스터 구성 로그 파일에 보안 조치를 취합니다.
원격 컴퓨터에서 새 서버 클러스터 마법사와 노드 추가 마법사를 사용하면 이러한 마법사가 생성한 클러스터 구성 로그 파일이 원격 컴퓨터의 %systemroot%\system32\LogFiles\Cluster\ClCfgSrv.log에 저장됩니다. 이 로그 파일에는 클러스터에 대한 중요한 정보가 들어 있습니다. 해당 파일에 대한 액세스를 클러스터 관리자 및 클러스터 서비스 계정으로 제한합니다. 자세한 내용은 파일 및 폴더의 사용 권한 설정, 보기, 변경 또는 제거를 참조하십시오.

참고:
 새 서버 클러스터 마법사 또는 노드 추가 마법사를 사용 중인 노드에 대해 관리 권한 및 사용 권한이 없을 경우 로그 파일은 로컬 %Temp% 디렉터리에 생성됩니다.
 

주 노드 집합 클러스터의 로컬 클러스터 디렉터리로 파일을 복사하지 마십시오.
주 노드 집합 모델을 사용할 때 각 노드는 %systemroot%\Cluster\MNS.%ResourceGUID%$\%ResourceGUID%$\MSCS에 있는 클러스터 디렉터리에 쿼럼 데이터베이스 복사본을 유지합니다. 파일을 \Cluster 디렉터리의 하위 디렉터리에 두고 주 노드 집합 리소스를 삭제하면 클러스터 서비스에서 해당 파일을 삭제합니다.

HKEY_LOCAL_MACHINE 시스템 레지스트리 하위 트리의 기본 보안 설정을 바꾸지 마십시오.
기본적으로 Builtin 폴더의 관리자 그룹 구성원 및 로컬 시스템 계정만 HKEY_LOCAL_MACHINE 시스템 레지스트리 하위 트리에 대한 모든 권한을 갖습니다. 이 레지스트리 하위 트리가 노출되면 일반 스크립트 리소스와 같은 일부 리소스를 시작하지 못할 수도 있습니다. 시스템 레지스트리 보안에 대한 자세한 내용은 레지스트리 보안 유지 관리를 참조하십시오.

서버 클러스터에서의 보안에 대한 자세한 내용은 클러스터에서 보안 관리를 참조하십시오.

반응형

+ Recent posts