최신목록

2020년 7월 28일 화요일

[DB]MSSQL DATABASE 용량 정리

MSSQL 데이타베이스는 데이타를 삭제해도 MDF. LDF 파일 사이즈는 줄어들지 않는다. 여유공간으로 활용을 하는듯하다.

해당 여유공간때문에 데이타베이스 파일이 너무 커졌을때 축소방법

해당 DB > 태스크 > 축소 > 데이타베이스 메뉴를 통해 데이터베이스 축소 창을 실행시킨다.
아래 체크 박스에 체크를 해서 단편화 된 DB 파일을 정리한다. 아래 여유공간을 0으로 잡아서 여유공간도 없앤다.



[DB] MSSQL 테이블 별 사용량 및 레코드수 확인

데이타베이스 용량이 커져서 줄이고 싶을때 각 테이블별 용량 확인 및 레코드 수 확인 방법

[테이블 별 사용량]
SELECT CONVERT(VARCHAR(30), MIN(o.name)) AS TABLE_NAME
     , LTRIM(STR(SUM(reserved) * 8192.0 / 1024.0, 15, 0) + ' KB') AS TABLE_SIZE
FROM   sysindexes IDX INNER JOIN sysobjects OBJ ON IDX.id = OBJ.id
WHERE  IDX.indid IN (0, 1, 255) AND OBJ.xtype = 'U'
GROUP BY IDX.id
ORDER BY SUM(reserved) * 8192.0 / 1024.0 DESC

[테이블 별 레코드수]
SELECT OBJ.name, IDX.rows
FROM   sysindexes IDX INNER JOIN sysobjects OBJ ON IDX.id = OBJ.id
WHERE  IDX.indid < 2  AND OBJ.xtype = 'U'
ORDER BY  INDEX.rows DESC

2020년 7월 27일 월요일

[Driver]IRQL LEVEL 과 PAGED_CODE

디바이스 드라이버에서 중요하게 생각되는 점이 IRQL 이 DISPATCH_LEVEL 수준 이상의 작업을 진행하는 동안은 절대로 스케줄링 혹은 페이징이 발생하지 않도록 하여야 한다는 것이다. 그래서 그런지 기본적으로 디바이스 드라이버 코드는 NonPaged 영역에 할당된다. 그러나 NonPaged 영역은 한계가 있는 자원으로 필요한 경우에만 사용하여야 한다. 

컴파일러중에는 이를 위해서 특정 섹션(Paged 영역등)에 코드를 둘 수 있게 pragma를 지원(ALLOC_PRAGMA)하기도 한다. 아래와 같이 DriverUnload등의 함수를 Paged 영역에 할당되게 설정한다.


#ifdef ALLOC_PRAGMA
    #pragma alloc_text(INIT, DriverEntry)
    #pragma alloc_text(PAGE, DriverUnload)
    :
    :
#endif

하지만 위와 같이 사용하였을 경우  IRQL이 DISPATCH_LEVEL 이상인 상태에서 해당 함수가 불릴 경우 페이지 폴트가 발생하여 블루스크린이 발생할 수도 있다. 이것을 방지하기 위해서  해당 함수 앞에 PAGED_CODE() 매크로 를 두어 위 상황에서 바로 시스템 크래쉬를 일으켜 더 복잡한 문제를 방지할 수 있게 해준다.

PAGED_CODE() 매크로는 아래와 같이 wdm.h에 정의되있다. 

#define PAGED_CODE() PAGED_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 



2020년 7월 23일 목요일

[python]웹 사이트 이미지 캡쳐(phantomjs, chromedriver)

웹 사이트 이미지를 캡쳐하려고 하는데  phantomjs를 사용하는데 오류가 났다.

<소스코드>
from selenium import webdriver
browser = webdriver.PhantomJS(executable_path="/usr/local/bin/phantomjs")

<오류내용>
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
 warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
WebDriverException: Message: can not connect to the service /usr/local/bin/phantomjs

<ps 내용>
root        91    87  1 23:27 pts/0    00:00:00 /usr/local/bin/phantomjs --cookies-file=/tmp/tmpforl8wrl --webdriver=43509

43509포트로  phantomjs가 떠있다가 위의 오류내용을 뿌리고 죽어있는것을 확인함. 동작할려고 노력은 했다는 얘기...

phantomjs 말고 chrome 인 firefox를 쓰라고 되있고 headless version을 사용하라고 한다.

먼진몰라도 하라는데로 해봄.
먼저 chromedriver를 설치함.

>apt install chromium-chromedriver

<소스코드>
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=options)

<오류내용>
WebDriverException: Message: can not connect to the service chromedriver

headless만 추가하니 비슷한 오류나 나온다.
옵션을 좀 추가해보자.
<소스코드>
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
browser = webdriver.Chrome(chrome_options=options)

여전히 문제가 발생한다. phantomjs 문제가 아니다.ㅠ

구글링하다보니 이상한 말이 있다. /etc/hosts 에 localhost를 추가하라는...앗...
docker ubuntu 환경에서 테스트 중이었는데 /etc/hosts 열어보니 내용이 1도 없다...하..

127.0.0.1 localhost

추가하고 실행하니 잘된다....잘못된 가설로 계속 시도하는것을 삽질이라고 했던가..ㅋ






2019년 8월 16일 금요일

[VS]visual studio spectre 설정 끄기


어쩌다 보니 c/c++ -> 코드 생성 -> 스펙터 완화 기능이 사용으로 프로젝트가 생성되게 환경이 구축됨.
-msvc 라이브러리를 vctoolsinstalldir\lib에서 찾지않고 vctoolsintalldir\lib\spectre\에서 찾음.
-> 기본적인 라이브러리들이 빠져있어서 링크에러남.



해결방법
-프로젝트마다 스펙터 완화 기능을 끄거나 솔루션 폴더 또는 프로젝트 루트 폴더에 Directory.Build.props 파일을 하나 만들고 스펙터 관련 설정값을 넣어줌.
<Project>
  <PropertyGroup Label="Configuration">
    <SpectreMitigation>false</SpectreMitigation>
  </PropertyGroup>
</Project>

2019년 7월 16일 화요일

[windbg]프로세스 crash날때 덤프 생성 설정

기본으로는 덤프 생성 기능이 꺼져있음.

[레지스트리 설정]

 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps
       -DumpType(REG_DWORD) : 1 : 미니덤프, 2 : 풀덤프
       -(optional) DumpCount(REG_DWORD) - 폴더에 저자오디는 덤프파일의 최대개수
       -(optional)DumpFolder(REG_EXPAND_SZ) - 덤프 저장경로(DEFAULT:%LOCALAPPDATA%\CrashDumps)



       

2019년 7월 1일 월요일

[wireshark]HTTPS 복호화해서 보기(IE)

테스트를 위해 IIS 서버를 구축하여 https 서비스를 올렸다.

https://192.168.130.134 로 접속하였을때 wireshark 캡쳐 내용은 아래와 같다.


TLSv1.2 Payload is encrypted application data 라고 되어있음. 이제 복호화를 해보자.

크롬이나 파이어폭스는 SSLKEYLOGFILE 를 이용해서 private key 없이도 복호화가 가능하다. 편리함. 굳이 내가 인증서를 알고있는 서버 아니라도 가능하다는 소리.

하지만 IE는 서버쪽 private key를 알아야만 복호화가 가능하다. 복잡해진다...
바로되지도 않는다....ㅠ

1. IIS 서버의 인증서를 export 한다. 아래와 같이 설정후 패스워드를 넣고 저장한다.






2. 이제 클라이언트쪽으로 와서 wireshark을 열고 Application Data에서 팝업메뉴를 열고
Protocol Preferences->Open TLS preferences...를 클릭한다.

3. RSA keys list의 Edit 버튼을 클릭해서 아래와 같이 IIS Server에서 추출한 키를 추가한다.

4. 아래와 같이 HTTP2 포맷의 데이타가 보인다.

** 키를 넣어도 복호화가 안될때가 있다.
그럴때는 TLS  debug file 에 파일을 지정해주면 에러상태등을 확인할 수있다.

ssl_decrypt_pre_master_secret: session uses Diffie-Hellman key exchange (cipher suite 0xC02F TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) and cannot be decrypted using a RSA private key file.

cipher suit에 diffie hellman 이 포함되있으면 wireshark에서 decyrpt 가 불가능하다.
cipher suit에서 DHE가 들어간 cipher suit을 제거한다.