사내는 아니고 모교 메일 계정에 접속해보니 이상한 메일이 한통 와 있는데 좀 이상한 메일이 와 있더군요.(파일 첨부함.)



external_image


내용 자체가 너무 어처구니가 없어 피식 웃고 말았는데 모르면  당황 할 수도 있는 내용이긴 합니다.


간단하게 eml 해더를 열어본 결과 안심해도 되겠더군요.


1. 보낸이(from) 정보를 변조하는 건 어려운 일이 아닙니다. from이 같다고 계정이 해킹 당했다고 볼 순 없습니다. 만약 정말 계정이 해킹 당했다면

이런 메일이 보낸 편지함에도 남아 있을 가능성이 큽니다.(일부러 이런 흔적을 남기겠죠~)


2. 메일을 수신한후 48시간 이내에 비트코인을 송금하지 않으면 사생활 정보를 공개 하겠다고 하는데 메일 자체에 수신 내역을 확인 할 수 있는 해더나 트랙킹 코드가 존재하지 않았습니다.


3. 결과적으로 수신자에게 허위 사실로 공포감을 유도하여 비트코인을 뜯어내는 사기기법인데 구글에 검색해보니 이를 Email Bounce Attack이라고 하네요.


4. 이와 별개로 사생활을 위해 사용하는 PC 혹은 노트북의 웹캠은 사용하지 않는다면 가급적 스티커나 테이프로 막아 두는게 좋을거 같습니다. 해킹 프로그램이란게 의지와 상관 없이 설치 될 수도 있습니다. 어떠한 이유로든 본인이 코 후비는 사진 혹은 동영상이 인터넷에 유포됐다면 그걸 유쾌해 할 사람은 한명도 없을 거 같습니다.

Posted by 오달봉
,

Teclast x3 pro를 처분하고 중고나라에서 X5 pro를 구했다. 

무겁긴한데 확실히 성능도 괜찮고 적어도 내가 개발하는 것들을 개발하는 환경을 커버 하더라

다 좋았는데 이어폰을 꼽으니 왼쪽 단자에서 틱.틱.틱.틱 거리며 자꾸 귀를 거슬리는 것이다.

x3 pro때도 사운드로 고생했는데 Teclast 제품의 하드웨어간 조화는 개판 수준이란 생각이 든다.

혹시나 몰라 Realtek 홈페이지에서 High Definition Audio Codecs 드라이버를 새걸로 받아 설치해 보니

이런 문제는 더 이상 발생하지 않았다.


그냥 나같이 삽질 하는 사람이 없길 바라는 마음으로 포스팅 한다.

Posted by 오달봉
,

인텔 스마트 사운드 기술 OED와 충돌이 발생하는 문제인듯 하다. 사용안함을 하거나 제거해야 할 듯 하다.

만약 사운드 드라이버가 보이지 않는다면 드라이버를 재설치 해야 한다.

Posted by 오달봉
,

어디선가 퍼왔는데 출처가 -_-;; 불펌 신고 하시면 자삭 하겠습니다.

 

new String( str.getBytes( "8859_1"), "KSC5601")

new String( str.getBytes( "8859_1"), "EUC-KR")

new String( str.getBytes( "8859_1"), "UTF-8")

new String( str.getBytes( "KSC5601"), "8859_1")

new String( str.getBytes( "KSC5601"), "EUC-KR")

new String( str.getBytes( "KSC5601"), "UTF-8")

new String( str.getBytes( "EUC-KR"), "8859_1")

new String( str.getBytes( "EUC-KR"), "KSC5601")

new String( str.getBytes( "EUC-KR"), "UTF-8")

new String( str.getBytes( "UTF-8"), "KSC5601")

new String( str.getBytes( "UTF-8"), "8859_1")

new String( str.getBytes( "UTF-8"), "EUC-KR")

new String(str.getBytes("8859_1"), "EUC-KR")

Posted by 오달봉
,

el capitan업데이트에 너무 만족을 느낀 나머지 sierra가 앱스토어에 뜨자 마자 생각없이 업데이트를 해버렸다.

왠걸....... usb보조모니터에서 나타나는 버그도 많고 각종 호환성 문제에...... 정말 siri 말고 딱히 좋은 걸 못느낄 정도로 너무 업데이트가 개판이다.


타임머신 백업을 안해놔서 예전으로 돌릴 수도 없고 ㅜㅜ 그래도 보조모니터는 public beta 2부터 써먹을 만큼은 나아졌는데


제목과 마찬가지로 sqldeveloper에서 서버쪽에 접근하려고 하면 ora 17176 locale not recognized가 발생한다.


내부서버를 ssh 터널링으로 접속하는 방식이라 처음엔 터널쪽을 의심했었는데 패킷은 정상으로 날아가는것 같고......


구글링한 결과 대충 jvm로케일이 맞지 않아 이런 문제가 발생하는것 같다는 결론을 냈다.


다음과 같은 방법으로 해결가능하다. 


sqldeveloper에서 우클릭 (혹은 ctrl+클릭) 패키지 내용보기 후 

Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf파일을 열어

다음과 같은 옵션을 추가 한다.


AddVMOption -Duser.language=ko

AddVMOption -Duser.country=KR 


저장 후 sqldeveloper를 실행하면, 우선 app자체의 로케일이 한글로 바뀐 것을 확인 할 수 있고


사이트 접속도 가능해진다.


jvm자체 문제라서 아마 다른 자바기반의 애플리케이션도 이런 유사한 문제가 발생할 것 같다.


요즘 애플........ 예전같이 믿고 쓰는 맛이 줄어 실망감이 점점 커지고 있다.



Posted by 오달봉
,

원격 데스크탑 설정시 시스템 속성에서 원격탭 설정 어쩌구.......

아래와 같은 화면으로 설정하는건 쉽게 찾을 수 있는데.......

문젠 이래놓고도 막상 접속하면 접속이 안되는 경우가 발생한다.

이유는 하나 처음에 설치해서 랜선을 꼽거나 무선 네트워크 설정할때 공용네트워크로 설정해 놓고 사용하기 떄문이다.

이는 Windows 10의 방화벽 정책이 개인 네트워크일때와 공용네트워크일때 차이를 두는 정책이 존재하기 때문인데....... 이런 경우 방화벽 설정을 통해 바꿀 수가 있다.

대충 작업표시줄 옆 "웹 및 Windows 검색"에다 Windows 방화벽이라고 입력하고

 

이후 "Windows 방화벽을 통해 앱 또는 기능 허용" 클릭

 

원격데스크톱 항목에 개인/공용 탭을 모두 체크 표시로 하면 된다.

 

Posted by 오달봉
,

웹페이지 코딩은 가급적 에디트플러스를 배제하고 brackets로 하려고 노력하고 있다. 


정말 Sublime, Atom, jEdit등 다양한 에디터를 많이 써봤지만 가장 입맞에 맞는 건 Brackets였던 것 같다.


이곳에 찬양글이 있으니 참고 할 것 http://veamcamp.com/cookbook/brackets/


근데 브라우저를 새로고침 한다는게 커서를 걍 Brackets에서 하면 이 에디터가 재시작하게 되어 있다.


뭐 로컬에서 개발한다면 괜찮을 수도 있겠지만 synapse를 이용하여, 원격으로 에디트 하다가 재시작하면


커넥션이 끊겨 코드 반영이 안되는 낭패를 볼 수도 있으니 주의해야 한다. 


다행히도 이런 문제는 Brackets의 단축키를 변경하여 회피 할 수 있다.


메뉴에서 디버그(Debug) -> 사용자 키맵 파일 열기(Open user Key Map)에서 키맵을 변경 할 수 있다.




나같은 경우는 새로고침과 개발자도구 열기에 대해서 ctrl키를 같이 눌렀으때 기능이 작동하도록 하였다.




다른 키들을 수정하고 싶다면, https://github.com/adobe/brackets/wiki/Brackets-Shortcuts에 키목록이 있으니 참고 하기 바란다.


집에 맥북은 새로고침만 정의하여 쓰고 있다. (그 얘기인즉..... 여기는 회사고 일은 안하고 블로그질 하고 있다는 소리.......)





Posted by 오달봉
,

완전 납득 

 

 

 

Posted by 오달봉
,

한달전 있었던 일인데 좋은 경험이라 포스팅 해야지 해야지 하면서 방치해 두고 있다가 이제서야 글을 쓴다.

개발서버에서 UDP패킷 발생이 폭발적으로 발생하여, 네트워크 운영팀에서 급하게 서버를 차단했다는 연락을 받았고, 이에 대한 리포트를 받았다. 



(리포트의 일부)

일단 우리쪽 서버에서 UDP 패킷을 발생하는 문제였다. 이런 경험은 처음이라 뭐부터 어떻게 확인을 해야할지 잘 몰랐다. 

우선 cpu점유율이 많은 프로세스가 존재하지 않을까 하는 생각에 top으로 확인한 결과 통상으로 팀에서 사용하는 프로세스들 (팀 자체가 자바로 개발을 하고 있으니 java프로세스들이 많음.)외에 딱히 눈에 보이는 프로세스들이 보이지는 않았다.

일단 네트워크에서 UDP패킷이 많다고 하니 netstat으로 확인 해본 결과 세상에......

whwh라는 프로세스가 엄청난 량의 트래픽을 send 시키고 있었다.

참고로 netstat의 탭 순서는(운영체제에 따라 다르겠지만 cent os기준으로)

procotcal, recv-Q, send-Q, local address, foreign address, state 순이다.

여기서 recv-Q와 send-Q에 대해서 말하자면 받거나 보낼때 아직 처리되지 않고 대기중인 소캣의 사이즈를 의미한다.


웃긴건 whwh의 실행 파일이 존재하지 않았다는 점이다. 아마 메모리에 상주 시키고 파일은 삭제한 듯 하다.

일단 프로세스를 kill해서 상황은 종료 하긴 했는데 앞으로 관리를 좀 더 잘 해야 겠다는 생각이 드네.....

(비록 유시진은 아니지만 유입 경로를 알아내긴 했는데 규정상 말할 수 없는 사연으로.......)


Posted by 오달봉
,

제목데로 영어로 입력된 String을 한글로 바꾸는 자바 Class이다.

회사 소스를 정리하던 중 다소 오래된 코드긴 한데 꽤 괜찮아서 올린다.

내가 만든 코드도 아니고 네이버 지식인에서 유입된 코드인듯 하다.


/**
 * 영문으로 입력된 키보드 문자을 한글로 변환하는 클래스이다.
 * 이는 암호입력시 입력되는 영문 키보드 문자를 한글로 변환하여 
 * 이를 다른 한글과 비교하기 위함이다.
 * 
 * 아래의 개작 소스에 추가로 숫자, 특수문자, 기호등을 추가로 처리하도록 
 * 수정하였다.
 * 
 * 제약사항은 초성만 존재하거나 삼벌식은 지원하지 않는다.
 * 
 * 다음의 원저작자와 이를 Java 모듈로 변환한 개작자이다.
 * 원소스 : 자바스크립트 버젼 영한오토마타 / ROKAF CC 568th 김건호
 * 개    작 : 자바 컨버젼 / 박영민 06. 8. 1
 */
public class ConvertEntoKo {
	// 코드타입 - 초성, 중성, 종성
	static enum CodeType {
		chosung, jungsung, jongsung
	}
	
	static String ignoreChars = "`1234567890-=[]\\;',./~!@#$%^&*()_+{}|:\"<>? ";

	/**
	 * 영어를 한글로...
	 */
	public static String engToKor(String eng) {
		StringBuffer sb = new StringBuffer();
		int initialCode = 0, medialCode = 0, finalCode = 0;
		int tempMedialCode, tempFinalCode;

		for (int i = 0; i < eng.length(); i++) {
			// 숫자특수문자 처리
			if(ignoreChars.indexOf(eng.substring(i, i + 1)) > -1){
				sb.append(eng.substring(i, i + 1));
				continue;
			}
			// 초성코드 추출
			initialCode = getCode(CodeType.chosung, eng.substring(i, i + 1));
			i++; // 다음문자로

			// 중성코드 추출
			tempMedialCode = getDoubleMedial(i, eng); // 두 자로 이루어진 중성코드 추출

			if (tempMedialCode != -1) {
				medialCode = tempMedialCode;
				i += 2;
			} else { // 없다면,
				medialCode = getSingleMedial(i, eng); // 한 자로 이루어진 중성코드 추출
				i++;
			}

			// 종성코드 추출
			tempFinalCode = getDoubleFinal(i, eng); // 두 자로 이루어진 종성코드 추출
			if (tempFinalCode != -1) {
				finalCode = tempFinalCode;
				// 그 다음의 중성 문자에 대한 코드를 추출한다.
				tempMedialCode = getSingleMedial(i + 2, eng);
				if (tempMedialCode != -1) { // 코드 값이 있을 경우
					finalCode = getSingleFinal(i, eng); // 종성 코드 값을 저장한다.
				} else {
					i++;
				}
			} else { // 코드 값이 없을 경우 ,
				tempMedialCode = getSingleMedial(i + 1, eng); 
                                // 그 다음의 중성 문자에 대한 코드 추출.
				if (tempMedialCode != -1) { // 그 다음에 중성 문자가 존재할 경우,
					finalCode = 0; // 종성 문자는 없음.
					i--;
				} else {
					finalCode = getSingleFinal(i, eng); // 종성 문자 추출
					if (finalCode == -1){
						finalCode = 0;
						i--; // 초성,중성 + 숫자,특수문자,
                                                     //기호가 나오는 경우 index를 줄임.
					}
				}
			}
			// 추출한 초성 문자 코드, 
                        //중성 문자 코드, 종성 문자 코드를 합한 후 변환하여 스트링버퍼에 넘김
			sb.append((char) (0xAC00 + initialCode + medialCode + finalCode));
		}
		return sb.toString();
	}

	/**
	 * 해당 문자에 따른 코드를 추출한다.
	 * 
	 * @param type
	 *            초성 : chosung, 중성 : jungsung, 종성 : jongsung 구분
	 * @param char 해당 문자
	 */
	static private int getCode(CodeType type, String c) {
		// 초성
		String init = "rRseEfaqQtTdwWczxvg";
		// 중성
		String[] mid = { "k", "o", "i", "O", "j", "p", "u", "P", "h", "hk",
				"ho", "hl", "y", "n", "nj", "np", "nl", "b", "m", "ml", "l" };
		// 종성
		String[] fin = { "r", "R", "rt", "s", "sw", "sg", "e", "f", "fr", "fa",
				"fq", "ft", "fx", "fv", "fg", "a", "q", "qt", "t", "T", "d",
				"w", "c", "z", "x", "v", "g" };

		switch (type) {
		case chosung:
			int index = init.indexOf(c);
			if (index != -1) {
				return index * 21 * 28;
			}
			break;
		case jungsung:

			for (int i = 0; i < mid.length; i++) {
				if (mid[i].equals(c)) {
					return i * 28;
				}
			}
			break;
		case jongsung:
			for (int i = 0; i < fin.length; i++) {
				if (fin[i].equals(c)) {
					return i + 1;
				}
			}
			break;
		default:
			System.out.println("잘못된 타입 입니다");
		}

		return -1;
	}

	// 한 자로 된 중성값을 리턴한다
	// 인덱스를 벗어낫다면 -1을 리턴
	static private int getSingleMedial(int i, String eng) {
		if ((i + 1) <= eng.length()) {
			return getCode(CodeType.jungsung, eng.substring(i, i + 1));
		} else {
			return -1;
		}
	}

	// 두 자로 된 중성을 체크하고, 있다면 값을 리턴한다.
	// 없으면 리턴값은 -1
	static private int getDoubleMedial(int i, String eng) {
		int result;
		if ((i + 2) > eng.length()) {
			return -1;
		} else {
			result = getCode(CodeType.jungsung, eng.substring(i, i + 2));
			if (result != -1) {
				return result;
			} else {
				return -1;
			}
		}
	}

	// 한 자로된 종성값을 리턴한다
	// 인덱스를 벗어낫다면 -1을 리턴
	static private int getSingleFinal(int i, String eng) {
		if ((i + 1) <= eng.length()) {
			return getCode(CodeType.jongsung, eng.substring(i, i + 1));
		} else {
			return -1;
		}
	}

	// 두 자로된 종성을 체크하고, 있다면 값을 리턴한다.
	// 없으면 리턴값은 -1
	static private int getDoubleFinal(int i, String eng) {
		if ((i + 2) > eng.length()) {
			return -1;
		} else {
			return getCode(CodeType.jongsung, eng.substring(i, i + 2));
		}
	}
	
	public static void main(String[] args) {
		System.out.println(ConvertEntoKo.engToKor("zjavbxjfmf tkTek."));
		// 컴퓨터를 샀다.
	}

}
Posted by 오달봉
,