2016/07 27

자기 자신 IP Address C 코드로 확인하기.(SIOCGIFADDR)

현재 해결해야하는 미션은 자기가 쏜 Broadcast packet을 받을 경우 무시하는 코드를 작성해야만 한다. 들어오는 Packet에 대해서는 패킷을 보고 SRC IP Address 확인이 가능한데 나의 IP Address는 어떻게 확인이 가능한가. 위의 사진과 같이 ifconfig 를 통해 확인했을 때 enp0s3 이라는 이름의 interface의 10.0.2.15 라는 IP Address를 코드상으로 받아와야 한다. #include #include #include #include #include int main() { struct ifreq ifr; char ipstr[40]; int s; s = socket(AF_INET, SOCK_DGRAM, 0); strncpy(ifr.ifr_name, "en..

OS/Linux 2016.07.27

Linux 접속 차단하기. (TCP Wrapper)

Ubuntu 14.04 Server에 OpenSSH를 깔아 사용하고 있는데, 몇시간 정도 쓰다 보면 끊어지고, 한동안 연결이 안되고 뭔가 불안정한 모습을 보였다. 그래서 SSH 관련 로그를 좀 찾아보았는데, 여러 로그들을 검토해 보다 생각지도 못한 접속 시도들이 다수 일어나고 있음을 확인할 수 있었다. 검토 대상 로그 파일 : /var/log/auth.log [알수 없는 IP로 부터 root 권한 접속 시도] [알수 없는 IP로 부터 존재하지 않는 계정(orego)으로 접속 시도] 한군데서가 아니라 여러 군데에서 초 단위로 접속 시도를 계속 하고 있었다. 사실 Ubuntu sshd의 기존 Logging 은 AUTH(인증)에 대해서만 남기고 있기 때문에 내가 겪은 끊김이나 한동안 접속 안됨 문제들이 이런 ..

OS/Linux 2016.07.22

OpenWrt, package 부분 빌드하기.

[OpenWrt, 전체 기본 Image 만들기] 위 글을 참조해서 전체 Full Build를 한 번 진행했다면, package 의 부분 빌드가 가능하고, 해당 빌드로 만들어진 산출물만 설치가 가능해진다. 즉, 전체 빌드를 하지 않으므로 빠른 시간내에 수정 및 확인이 가능해진다. package build 방법은 다음과 같다. # make package/[package 이름]/compile 좀 더 자세한 로그와 함께 빌드를 진행하고 싶다면 아래와 같이 해주면 된다. # make package/[package 이름]/compile V=s Platform 마다 경로는 조금 다를 수 있지만 아래의 위치에 산출물인 .ipk 파일이 업데이트되어 있음을 확인할 수 있다. # cd bin/ar71xx/packages/b..

OS/OpenWRT, LEDE 2016.07.19

Android Studio, module 삭제.

Android studio에서 작업을 하다 보니 아까 내가 테스트로 잠시 만들어 놓았던 code가 별도의 모듈로 project 에 추가되어 있었다. 별도의 project 를 만들어서 테스트했던 줄로만 착각하고 있었던 것이다. 잘못 생성된 혹은 불필요하게 된 Module을 project에서 삭제하기 위해서는 다음과 같이 하면 된다. [File > Project Structure] 1. Project Structure 메뉴에 진입한 이후 위와 같이 왼쪽 메뉴 아래에 Modules에서 필요없는 모듈을 선택한다. 2. 선택 후 위헤 +, - 아이콘에서 -를 눌러 삭제한다 . 3. 여기서 삭제하게 되면 project에서 구조적으로 삭제가 될 뿐 실제 관련 파일들이 삭제되지는 않는다. 이 부분은 실제 탐색기에 들어..

Android 2016.07.19

Android Studio, Instant Run 에 대한 이해

안드로이드 앱 제작시 기본적으로 코드의 결과를 확인하는 과정은 다음과 같다. 코드 작성 -> 빌드 -> 결과물 deploy -> 결과물 확인 이 과정을 반복적으로 계속 하면서 확인하게 된다. 하지만 Instant Run, 이 기능을 이용하게 된다면 말그대로 코드 수정하는 즉시 적용되는 것을 볼 수 있다. 코드를 수정하는 순간 빌드, deploy 없이 바로 결과물을 확인할 수 있다는 뜻이다. 그렇다면 어떤 경우에 해당 기능이 적용될 수 있는지 알아보도록 하자. Android Studio 2.0 이상 Android Plugin for Gradle version 2.0.0 이상minSdkVersion 15 이상 (원활한 성능을 위해서는 minSdkVersion 21 이상) Instant Run의 종류에는 아래..

Android 2016.07.18

[해결방법] The number of method references in a .dex file cannot exceed 64K.

Android Studio : 2.1.2 minSdkVersion 15 (Android 4.0.3 APIs)Google Maps Activity Google Maps 기반으로 작업할 일이 생겨서 기본 Activity 로 Google Maps Activity 를 선택하고 project 를 빌드해 보았다. 별다르게 코드를 넣은 것도 아닌데 아래와 같은 에러가 발생하면서 빌드가 되질 않는다. Error:The number of method references in a .dex file cannot exceed 64K.Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html Android project..

Android 2016.07.18

[해결방법] To run dex in process, the Gradle daemon needs a larger heap.

문제에 대한 해결 방법이라기 보다 Warning에 대한 해결 방법이다. 빌드를 하다보면 아래와 같은 로그가 나올 때가 있는데 Gradle에서 사용하는 기본 heap 이 작게(?) 잡혀 있어서 발생하는 문제이다. 사실 아래 로그와 같이 910MB정도면 작은 편은 아닌데, 상당히 많은 heap을 사용하는 것 같다. To run dex in process, the Gradle daemon needs a larger heap.It currently has approximately 910 MB.For faster builds, increase the maximum heap size for the Gradle daemon to more than 2048 MB.To do this set org.gradle.jvmar..

Android 2016.07.18

Android - Android Studio에서 빌드 후 apk 위치.

보통은 Android Studio에서 빌드하게 되면 자동으로 install하고 실행까지하게 되어 apk를 확인할 일이 별로 없지만 apk 를 직접 확인해야 하는 경우가 생기기도 한다. Workspace 이름, Project 이름 같은 경우는 개별적으로 모두 다르기 때문에 자신의 workspace와 project 를 확인하여 아래 경로에 가보면 apk 를 확인할 수 있다. [Workspace 명]\[Project 명]\app\build\outputs\apk 해당 경로에 가보면 아래와 같이 apk 파일 확인이 가능하다. app-debug.apkapp-debug-unaligned.apk

Android 2016.07.18

Windows 10, 가상 데스크톱(Virtual Desktop), 더 넓어진 화면

기존 Windows 에는 없던 가상 데스크톱(Virtual Desktop) 기능이 Windows 10에 추가되었다. 사실 이런 종류의 기능은 Ubuntu 에서도 존재하는데, 이번에 Windows 10에서도 동일 기능이 추가되어 사용할 수 있게 되었다. [Ubuntu 의 Virtual Workspace] 이미 알고 있는 사람들은 알고 있겠지만 해당 기능은 말 그대로 가상으로 화면을 더 넓게 해주는 것이다. 가상 데스크톱새로 만들기를 계속 눌러봤는데 30개 이상까지도 만들어지는 것을 보면 일반 사용자 입장에서는 마음껏 만들수 있다고 보면 될 것 같다. Windows 10의 신기능인 가상 데스크톱을 사용하는 방법에 대해서 알아보자. 1. 우선 가상 데스크톱을 사용하기 위해서는 아래 작업 표시줄에 보이는 네모 ..

OS/Windows 2016.07.18

OpenWrt/LEDE, 전체 기본 Image 만들기

OpenWrt를 처음 접한다면 OpenWrt를 소개하는 아래글을 먼저 읽어보는 것을 권장한다. OpenWrt, 리눅스를 공유기 속으로. OpenWrt에 대해 이해하였고, 자신의 공유기에 OpenWrt를 적용하기로 결정을 했다면 자신이 빌드하고 적용하고자 모델이 OpenWrt에서 지원하는지 확인이 필요하다.OpenWrt 지원 여부 확인하기 OpenWrt에 대해 이해하였고, 보유한 공유기에 대해 빌드하기로 결정하였다면 아래 절차를 참고하면 된다. OpenWrt를 빌드하고자 한다는 것은 무엇인가 코드를 수정하거나 새로운 기능을 추가한다는 의미가 될 것이다. 그러기 위해서는 기준이 되는 바이너리를 먼저 만드는 과정이 필요하다. 기본 동작을 하는 바이너리가 확보되어야 그것을 바탕으로 수정 사항을 확인해 볼 수 있..

OS/OpenWRT, LEDE 2016.07.14

VirtualBox, Host PC와 파일/폴더 공유하기.

VirtualBox를 쓰다보면 VirtualBox내 파일을 Host PC 로 옮긴다거나 Host PC 의 파일을 VirtualBox내로 옮겨야 하는 경우가 종종 생기곤 한다. 이런 경우를 위해 VirtualBox에서는 공유 폴더를 통해 파일을 공유하는 방법을 제공하고 있어 소개한다. (Host PC : Windows, VirtualBox : Linux) 우선 상세한 설명에 앞서서 "VirtualBox, 자유롭게 화면 해상도 조절하기." 글에서 소개했던 "게스트 확장 CD 이미지" 의 설치가 필요하다. 만약 설치하지 않았다면 해당 글을 참고해서 설치를 먼저 진행해야 한다. http://technote.kr/157 공유 폴더 설정을 위한 "게스트 확장 CD 이미지" 설치 후 과정은 다음과 같다. 1. Hos..

Linux/Ubuntu, 용량 큰 파일/디렉토리 찾아내기.

컴퓨터를 사용하다보면 저장 공간이 부족해져 일부 파일을 삭제해야 할 때가 있다. 이왕이면 안쓰고, 크기가 큰 파일을 삭제하고자 하는데 그 큰 크기의 파일을 찾는 방법에 대해 알아보고자 한다. 참고로 만약 VirtualBox를 쓴다면 가상 하드 디스크 자체를 늘리는 방법도 있다. -. VirtualBox, 가상 하드 디스크 용량 조절하기. 리눅스에서 파일 사이즈를 아는 방법은 다양하다. 흔히 사용하는 ls를 사용할 수도 있고, du를 사용하는 방법 또한 있다. 여기서는 du를 사용해 보고자 한다. # du -s # du -sh du -s 를 실행하게 되면 하위 디렉토리 모두 포함한 현재 디렉토리의 전체 크기를 KB(킬로바이트) 크기의 단위로 보여준다. du -sh 와 같이 h 옵션도 붙여주게 되면 huma..

OS/Linux 2016.07.13

Linux/Ubuntu, CD/DVD 를 ISO로 만들기

CD/DVD를 ISO로 만들기 위해서 꼭 Linux 가 필요한 것은 아니다. 하지만 Windows 에서 만들기 위해서는 BurnAware, ISOMaker, IMGBurn등 쉽게 들어보지 못했던 프로그램들을 설치해야만 하는 문제가 있다. 이 프로그램들을 설치했을 때 내 Windows 에 무엇을 남겨놓을지 몰라서 VirtualBox로 설치해 놓았던 Ubuntu에서 CD/DVD를 ISO로 변환시켰다. 적어도 Linux에서는 기본 명령어로만으로도 가능하기 때문에 별도의 프로그램 설치는 필요가 없다. 목표 : (Bootable한) CD/DVD를 ISO로 만들기 1. CD/DVD의 위치 확인 시스템마다 다를 수 있으므로 현재 CD/DVD가 파일시스템 어느 위치에 있는지 확인해 본다.# lshw -c disk 위 ..

OS/Linux 2016.07.13

terminator, Linux 다중 분할 터미널

Ubuntu를 사용하게되면 기본적으로 아래와 같은 기본 terminal program이 포함되어 있다. 기본 terminal 인 만큼 기본에 충실한데, 하나 불편한 점이 있다. 여러 terminal을 띄우게 되면 이전에 띄운 terminal 들은 뒤로 가려져 보이지 않는다는 것이다. 그래서 찾아낸 것이 terminator 라는 프로그램이다. https://launchpad.net/terminator terminator를 사용하게 되면 이전 창을 가리는 것 없이 아래와 같이 사용이 가능하다. 수직/수평으로 사용자가 마음대로 분할이 가능하다. 설치는 다음과 같다. (root 권한 필요) Ubuntu# apt-get install terminator Fedora/RHEL# yum install terminat..

OS/Linux 2016.07.12

Ubuntu package 검색하기/상세정보보기/설치하기 (apt-cache, apt-get)

Ubuntu에서는 여러가지 package 설치 방법들이 존재한다. "Ubuntu Software"를 통해서 UI로 설치할 수도 있고, apt-get, aptitude, dpkg 등을 통해 CLI를 통해 설치할 수도 있다. 여기서는 apt-get을 통해 package 를 검색하고, 찾은 package의 상세 정보를 확인하고 설치하는 방법에 대해 알아보고자 한다. -. 모든 명령은 root 에서 이루어져야 한다.-. 예제로 'terminator' 라는 package를 설치하였다. 1. package 의 검색# apt-cache search terminator 2. package 의 상세 정보 확인# apt-cache show terminator 3. package 의 설치# apt-get install te..

OS/Linux 2016.07.12

Ubuntu 최신으로 유지하기 (apt-get, aptitude, Ubuntu Software)

Ubuntu 를 최신으로 유지하는 방법에 대해 소개하고자 한다. 이 방법들은 Ubuntu 12.04, 14.04, 16.04 등 특정 버전의 국한되지 않는다. -. Terminal(cmd)을 이용하여 최신으로 유지하는 방법-. UI를 이용하여 최신으로 유지하는 방법 Terminal(cmd)을 이용하여 최신으로 유지하는 방법 1. 아래 명령어를 이용해 /etc/apt/sources.list 에 정의된 서버에서 최신 package list를 받아온다.# apt-get update혹은# aptitude update 2. 아래 명령어를 이용해 현재 system 에 설치된 package들을 최신으로 바꾼다.# apt-get upgrade혹은# aptitude upgrade # 참고용으로 apt-get 의 man ..

OS/Linux 2016.07.12

OpenWrt, 리눅스를 공유기 속으로.

우선 제목에 언급한 OpenWrt 에 대해 간략히 소개하자면 Linux 기반으로 만들어 놓은 Customize된 공유기 firmware이다. 즉, 공유기 회사에서 만든 전용 firmware가 아니고, 외부 개발자들이 Linux를 해당 공유기에서 동작할 수 있도록 리눅스를 기반으로 수정한 firmware인 것이다. OpenWrt를 쓰는 이유? OpenWrt 라는 주제를 가지고 글을 쓰고자 했을 때 여러 모로 고민을 많이 하였다. "왜 굳이 잘 동작하는 전용 firmware가 있음에도 외부개발자들이 Linux를 올려서 firmware를 만들었을까." "과연 OpenWrt를 사용함으로써 얻게 되는 이득이 무엇이길래 만들었을까." "잘 만들어 놓은 공식 Firmware가 있음에도 무엇때문에 OpenWrt를 사용..

OS/OpenWRT, LEDE 2016.07.11

IPTIME A1000UA, Linux 에서 사용가능한가.

사실 Linux에서 사용하려고 구매했던 것은 아니지만 무선랜카드가 A1000UA 밖에 없는 상황이라 Ubuntu에서 네트워크 사용 할일이 있어 시도해 보았다. 사실 이번에 처음 시도하는 것은 아니고 이전에 사용하기 위해 iptime 홈페이지에서 Linux 용 driver를 제공하는지 알아본 적은 있었다. 다행인지 iptime에서는 A1000UA의 드라이버를 제공하고 있었는데, 좀 더 정확히 말하자면 A1000UA에서 사용하는 Mediatek MT7610U의 가져다가 올려놓은 것까지만 확인했었었다.올려져 있는 파일을 다운받아 README를 보면 아래와 같이 적혀있다. =================== Supporting Kernel: =================== linux kernel 2.4 an..

OS/Linux 2016.07.08

Ubuntu 16.04, 기본 설정에서의 Kernel Compile.

지난 4월 26일자로 Ubuntu 16.04가 release 되었다. 사실 Linux kernel compile에 있어서 Ubuntu 의 버전은 그다지 상관은 없지만, 나온지 얼마되지 않은 Ubuntu 16.04에서 Linux kernel compile할 일이 있어, 설치해야할 package등 정리하면서 작성해 보았다. 시행착오 과정까지 모두 적은지라 결론만 보고 싶으신 분들은 제일 마지막 부분만 참고 하셔도 될 것 같다. Linux kernel compile on Ubuntu 16.04참고로 build에 사용된 Ubuntu 16.04는 Ubuntu.com에서 iso 다운로드 받고서 설치한 직후의 상태라 별다르게 설치된 package는 없는 상황이었다. 현재 사용하고 있는 Ubuntu 16.04와 동일한..

OS/Linux 2016.07.07

VirtualBox, 자유롭게 화면 해상도 조절하기.

VirtualBox에 ubuntu를 설치하고 난 직후, VirtualBox를 전체크기로 변경한다면 아래와 같은 화면을 볼 수 있을 것이다. VirtualBox를 통해 설치한 가상 OS의 화면을 자유자재로 변경시키려면 몇가지 설치가 더 필요하다. VirtualBox를 전체 화면으로 하게 되면 기본적으로 아래와 같이 보인다. 창은 커지는데 안에 보이는 가상 OS의 화면은 그대로여서 흰 공간이 보이게 된다. 따라서 몇가지 설치를 더 해주어야 한다. (VirtualBox Guest Addtions)1. VirtualBox의 메뉴 중 [장치 > 게스트 확장 CD 이미지 삽입]을 선택한다. 2. 선택하게 되면 마치 CD를 하나 더 넣은 것 처럼 인식하게 되고 , 실행 여부를 물어보게 되는데 "Run"을 눌러 실행한..

VirtualBox, 가상 하드 디스크 용량 조절하기.

VirtualBox 를 이용해 Linux Kernel Compile을 진행하고 있다. 그 동안의 기억으로 Linux는 크게 용량을 먹지 않았던 것으로 알고 있었는데, 막상 kernel compile을 해보니 용량 증가 속도가 상당이 빠르고 많다는 것을 알았다. 처음에 가상 하드 디스크로 16GB를 할당해서 쓰고 있었는데 compile 도중에 모두 차버렸다. 사용할 수 있는 공간이 없어서인지 X window에서 terminal도 실행이 안되고 해서 console로 진입해 용량을 확인해 보았다. 용량 확인을 위해 df -h를 해보니 /dev/sda1 에서 Avail이 0으로 되어 있고 Use%가 100%로 바닥나버렸다. 그래서 처음에 16GB로 잡았던 용량을 늘리기 위해서 VirtualBox 세팅을 아무리 ..

VirtualBox, OS 위의 또 다른 OS

요즘에 있어 사실 Desktop virtualization이 새로운 화두는 아니다. virtualization(가상화)의 대명사인 vmware가 설립된지도 18년이나 지났고, (1998년에 설립) 이 글에서 소개하고자 하는 VirtualBox가 공개된지도 9년이 지났다. (2007년 공개) 오래된 화두임에도 글을 적는 이유는 VirtualBox를 오랜만에 사용해보았는데 무료임에도 불구하고 전과는 달리 안정적으로 동작하여 기존에 virtualization을 위해 사용하던 vmware을 대체할 수 있을 만한 것 같아 소개하고자 하기 위해서이다. VirtualBox에 대해 소개하기 전에 virtualization(가상화)에 대해 간략히 소개하면 다음과 같다. 예를 들어 "Windows", "Linux", "O..

Wi-Fi Sense, 보안과 편리함의 사이에서.

Windows 10에는 Wi-Fi Sense라는 새로운 기능이 있다. 그 기능에 대해 요약하자면 자신이 가진 Wi-Fi 연결 정보(i.e. AP 비밀번호)를 등록된 자신의 지인들과 자동으로 공유하는 것이다. AP 비밀 번호를 명시적으로 알려주지 않더라도 자동적으로 공유를 통해 내가 지인의 Wi-Fi Network를 사용할 수 있도록 하고, 지인이 나의 Wi-Fi Network를 사용할 수 있도록 하는 것이다. (대상이 되는 지인은 "Outlook.com 연락처, Skype 연락처, Facebook 친구"이다.) 자신이 사용하는 Wi-Fi Network를 지인들과 자동으로 공유하고 또한 공유받아, 믿을만한 사용가능한 Network의 범위를 더 넓힌다는 관점에서 보면 참 괜찮은 생각인듯 하다. 하지만 이 기..

OS/Windows 2016.07.06

Type casting 시 주의해야할 점. (signed, unsigned)

socket을 통해 받아들이는 1 byte (8 bit) 정보를 처리해야 할 일이 생겼다. 해당 값은 0xEE(10진수: 238) 이었다. 0xEE는 0xFF(256)보다 작은 값으로 8 bit만으로 처리가 가능한 값이다. 이에 아래와 같이 송수신하도록 코드를 작성하였다. unsigned int len;char sendbuf[4]; len = 238;sendbuf[0] = len; 이후 sendbuf 송신.........unsigned int len; char receivebuf[4]; receivebuf에 수신........... len = *(receivebuf+1); 송신측에서 전송한 238(0xEE)를 그대로 수신하여 변수에 저장할 것이라고 예상하였지만 결과는 -18로 저장되고 말았다. unsig..

Language/C 2016.07.04

sizeof - 함수가 아닌 연산자.

C언어를 접한지도 오래되었지만 때때로 내가 이리도 모르는 부분이 많았던가 하는 생각이 종종 들곤 한다. 그리도 많이 써왔던 sizeof에 대해 좀 더 정확한 사용 방법을 알아보기 위해 man page를 찾아보았는데, 아무리 man sizeof 를 해보아도 man page가 나오질 않았다. 혹시나 내가 미처 설치하지 못한 package가 있는가 해서 나오질 않는 것인가 해서 좀 찾아보았다. 수 많은 sizeof 관련 글 가운데 sizeof는 함수가 아니라 연산자여서 man page가 없다는 글을 보게 되었다. 순간 이게 무슨 소리 인가 했다. man page가 없는 이유가 연산자여서 라는 건가....연산자인데 왜 man page가 없는 거지???? 우선 연산자이기 때문에 man page가 없다 .==> 연..

Language/C 2016.07.04

MacBook Air에서 Windows 10 업데이트 후기

얼마 전 Windows 10관련 자동 업데이트를 하지 못하는 방법에 대해 글을 쓴적이 있었다. 당시 글을 쓸 때 주변에서 그래도 Windows 10이 나온지 꽤 되어서 어느 정도 호환성을 갖추었다는 의견이 있어 개인적으로 사용하는 일반 Desktop에 시험삼아 설치를 해보았다. 제일 먼저 널리 알려져 있는 빠른 부팅을 경험할 수 있었고, 우려되었던 호환성 문제 역시 설치해 본 결과 Windows 7과 별 차이를 느끼지 못할 정도로 사용에 별 문제가 없었다. 은행 사이트 사용에도 문제가 없었고, 기존에 사용하던 각종 프로그램들도 별다른 문제없이 사용이 가능하였다. 역시 다소 시간이 흘러 이슈들이 많이 해결되었구나라고 생각하였다. 추가적으로 집에는 MacBook Air가 있다. 사실 MacBook Air에는..

OS/Windows 2016.07.01

memset - 하위1byte pattern 의 이해

대체로 남들이 짜놓은 코드만 바라보다 보니, 막상 직접 짜게되니까 부딪치는 문제들이 다발하기 시작했다. 백문이 불여일타라고 했던가. 아무리 코드를 계속 보아도 실제 쳐보는 것과는 판이하게 다르더라. 학부때 당연하게 사용했던 메모리 초기화까지도 이제는 가물가물해졌다. memcpy(&a, 0, sizeof(a)); 이렇게 해놓고 자꾸 segmentation fault가 나는 원인을 찾아보겠다고 한동안 계속 삽질을 하였다.참 어이없는 실수가 아닐 수 없지만 오랜만에 직접짜다 보니 이런 일이 계속 생긴다. 위 memcpy는 0으로 초기화하는 것이 아닌 0번 주소부터 변수 a 크기만큼 복사를 해 오는 것이다. 0번 주소는 일반 application이 접근할 수 없는 주소라 접근하는 순간 죽어버린다. memset(..

Language/C 2016.07.01