[펌] 열려진 포트 정보 알아오기

유용한 code | 2010.02.05 21:02 | Posted by imesu-문경원

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */


c언어와 소켓 프로그래밍에 대한 지식, OSI 7계층 프로토콜중
TCP, IP, UDP, ICMP와 전송계층, 네트워크 계층의 프로토콜 지식이 있으면
충분히 이해할 수 있는 간단한 내용입니다.

예제 소스도 아주 간단하게 "열려있는지"만 파악하는 내용이므로
어렵지 않게 이해하실 수 있을것이라 생각합니다.

포트스캔 하는 방법도 상당히 여러가지고, 무척 어려운 부분이지만
아주 간단하게 준비하였습니다.
이 글을 보시고 난 후 옵션이나 기능을 추가하시면서
더 멋있는 포트스캐너를 만들어 보세요.


1. port?
2. portscan?
3. 예제 소스



CTF 해킹방어대회나 서버 모의 해킹을 할 때
가장 기본적으로 하는것중에 하나가 포트스캔입니다.
국내에서 포트스캔 하는 행위 자체는 불법 행위이므로
포트스캐너를 구현 한다음 타 ip에 스캔하는 행위는 해선 안됩니다.


1. port?
아마 소켓프로그래밍 하면서 충분히 공부하셨을거라 생각합니다.
포트에도 상황에 따라서 다양한 의미가 있겠지만,
여기서는 "프로그램과 외부와의 통로" 로 이해하시면 되겠습니다.
워크, 아프리카tv, 네이트온과 같은 네트워크 프로그램은 로컬이 아닌 외부와의 컴퓨터와
데이터를 교환합니다. 만약 포트가 없다면 네이트온에 전달되야 할 데이터인지,
아프리카 tv로 전달되어야 할 데이터인지 컴퓨터가 구분하지 못하게 됩니다.

때문에 컴퓨터는 외부에서 들어오는 패킷들을 구별하기 위해
통로를 두어 0번통로에 들어오는 데이터들은 네이트온으로 향한다.
1번통로에 들어오는 데이터는 아프리카tv,2번, 3번, 4번~~ 65535번 통로~~
를 만들게 되었습니다.

이 통로가 포트를 말하고, 0번부터 1023번까지 총 1024 포트는 well-known 포트라고
web, ftp, ssh 등 세계에 공용으로 누구든지 쓰는 포트에 대해서는 미리 정해놓고 사용합니다.
포트는 0~65535번까지 총 65536개가 존재합니다. (2의.. 몇승이였더라? 16승..이네요)


2.portscan?
포트스캔은 말 그대로 "포트를 스캔한다" 가 되겠습니다.
네이트온이 7777 포트로 패킷을 공유하고 있다면,
외부에서 로컬 컴퓨터에 7777번 포트로 connect가 가능합니다.
하지만 6666 포트를 사용하는 프로그램은 없습니다.
따라서 외부에서 로컬로 6666 포트로 connect는 불가능합니다.

이때 7777번 포트는 open 되어있다 라고 하고,
6666번 포트는 close 되어있다 라고 표현합니다.

이처럼 리눅스에서는 네트워크를 하는 데몬 (윈도우에서는 적절한 프로그램이 되겠네요)들은
필수적으로 어떤 포트를 열것이고, 외부에서 그 포트로 접근이 가능하겠죠?
어떤 포트에 대해서 열려있는지, 닫혀있는지 확인하는것이 포트스캔입니다.

어떤 서버를 공략하고 싶을때 모든 포트에 대해서
검사를 한다음, 열려있는 포트에 대해 취약점을 조사하면 되겠죠?


예제를 보겠습니다.





[배수] 입력된 수가 속한 배수 구하기

유용한 code | 2010.02.04 11:57 | Posted by imesu-문경원


아래의 4의 배수를 구하는 프로그램이다.
0~4 : 0
4~8 : 4
8~12 :8
..
이런 형식의 결과를 얻을 수 있다.




[펌] stdin으로부터 키 입력 체크하기

유용한 code | 2010.02.02 13:27 | Posted by imesu-문경원

<출처> http://kldp.org/node/35884 

음 오래전 얘기가 리바이벌되었군요.
그때 아예 예제도 하나 올릴것을 그랬나 봅니다.

터미널제어문자열 처리에 대해 조금 공부하시고, telnet등의 터미널제어문자들에 대해 공부해보세요.

그리고, cannonical mode에서 터미널에서 입력된것은 일단 서버컴퓨터로 전송이 됩니다. 서버컴퓨터의 터미널제어루틴에서 유한상태오토마타(FSM)로 코드가 수행됩니다. 버퍼에 넣고, 제어가 끝나기를 기다리게됩니다. 위에 약간 이상한 표현이 있어서 참고삼아 씁니다.

일단, 소스나 올리겠습니다. 질문자님의 소스를 조금 손봐서 올립니다.
프로그램의 종료는 '스페이스바' 즉, 공백문자 되겠습니다.
Raw mode로 진입하게 되어, Ctrl+C도 안먹지요... 당연...




[code]자기ip, subnet주소 알아오기 linux

유용한 code | 2009.12.28 11:36 | Posted by imesu-문경원


<출처>

요상한 배열 사용법

유용한 code | 2009.12.05 19:48 | Posted by imesu-문경원


이런 저런 소스를 보다가 요상한 소스를 발견했다.

배열에 값을 넣는 건데  아래와 같다.


이렇게 해도 된다니...
나중에 사용할 만한 곳 있으며 써봐야지 ^^

[code - C 언어] 원하는 비트만 설정하기

유용한 code | 2009.05.27 13:29 | Posted by imesu-문경원
임베디드 프로그램을 하다보면 원하는 비트단위로 무언가를 설정하곤 합니다.

손쉽게 할 수 있는 방법은 없을까요?

없긴 왜 없겠어요. 여기 있습니다.

원하는 비트만 설정 할 수 있을 뿐만 아니라. 이전에 설정한 값을 그대로 보존하지요.. ^^




4번 라인에서 전역변수로 값저장하기 위한 변수를 잡아 놓고
9번에서 우리가 설정하고자 하는 비트만 0으로 만든 다음에
10번 라인에서 해당 비트에 0 또는 1을 설정합니다.

참 쉽죠~ ㅋㅋ