컴퓨터에서 SMS 전송하기...

내가 자주 가는 개발자 커뮤니티 사이트에 간간히 올라오는 질문 중 하나가 바로 컴퓨터에서 SMS 전송하는 방법이다.

참고로 나도 이 방법을 알아 내기 위해서 대략 2년 전에 꽤많은 삽질을 했었다. 알고 보면 아무것도 아니지만 그간 고생한 것도 있고 이게 일종의 회사 노하우라 지금껏 정확한 답변을 피해왔었는데 다시 생각해 보니 이제 우리 회사에서 이것가지고 뭐 해먹을 것도 없을 것 같고 그다지 가치 있는 기술도 아닌 것 같아 그냥 공개해 버리기로 결심 했다.

그렇다고 매번 질문 글에 답변 해주기도 귀찮고 해서 그냥 여기다 적겠다. 뭐 능력껏 검색해 보는 것이지...

SMS 전송하는 방법에는 크게 두 가지가 있다.
하나는 SMSC 서버에 직접 연결해서 전송하는 방법이고, 다른 하나는 단말기에 SMS 전송 명령어를 보내는 방법이다.
전자는 사업자의 동의가 필요하다. 그래서 SMSC와 내 컴퓨터간에 통신을 할 수 있게 되면 SMPP프로토콜을 이용하여 SMSC에서 바로 특정 단말기에게 문자 메시지를 보낼 수 있다. 대신 아마 계약을 위해서 돈이 필요할 테고 아무나 허가해 주지는 않을 것이다...뭐...SMSC를 후킹하는 방법도 있지만...자칫 정상적인 사회 생활을 못하게 되는 부작용이 있다.
후자의 방법은 시리얼 통신을 통해서 단말기에 SMS 전송 명령어를 보냄으로써 단말기가 SMS를 보내게 하는 것이다. 비교적 간단하며 실제 SMS를 보내는 것과 아무런 차이가 없기 때문에 합법적인 방법이다. 돈도 적게 든다.(아마 건 당 30원인 것으로 알고 있다.) 다만 해당 단말기가 SMS전송 명령을 지원해야 한다는 제약 사항이 있다.

첫 번째 방법은 제쳐 두고 두 번째 방법에 대해서 이야기 해보자...

우리 나라는 단말기의 모든 인터페이스가 TTA24라는 것으로 규격화 되어 있다. 따라서 모든 단말기의 외부 연결 단자가 동일하다.
예전에는 모두 달랐었는데 정통부에서 몇 년전에 통일시켜 버렸다...당시 해당 표준화에 참가했던 교수님 이야기로는 이것 때문에 단말기 제조업체마다 충전기 관련 부서가 대폭 축소되거나 사라져 버렸다고 한다...

어쨌든 이 TTA 24를 통해 컴퓨터와 단말기를 연결할 수 있다. 그래서 단말기를 모뎀으로 이용하여 컴퓨터로 통신을 할 수도 있고 단말기 내부에 있는 각종 정보를 컴퓨터에 저장했다가 다른 단말기로 옮길 수도 있다. 어쨋든 이 때 통신을 하거나 정보를 송/수신 하기 위해 보통 사용하는 명령어가 AT 명령어이다.

아마 예전에 PC통신을 했던 세대라면 ATDT 라는 명령어를 기억하고 있을 것이다. 전화를 걸기위해 사용하는 AT 명령어이다. 이 AT 명령어는 CDMA 단말기에도 그대로 사용되며 우리가 TTA24 데이터 케이블을 단말기에 연결하여 인터넷 통신을 할 때도 ATDT 와 같은 명령어는 똑같이 사용된다.

그 외에도 AT 명령어는 단말기를 제어하는데 사용되는데 이제 말하려는 SMS 전송도 이 AT 명령어를 이용하여 구현할 수 있다.

단, SMS 전송은 전화 접속과 달리 모든 단말기에 적용 가능한 표준 AT명령어가 없다. 적어도 내가 테스트 해본 바에 의하면 우리 나라 단말기 중 규격에 명시된 AT 명령어를 이용해서 SMS 전송이 가능한 단말은 없다...뭐...그렇다고 내가 우리 나라에 있는 모든 단말기를 테스트 해본 것은 아니다...

어쨌든 내가 알고 있는 SMS 전송 AT 명령어는 삼성이 내부 규격으로 가지고 있는 규격이다. 왜 내부 규격이라고 표현하냐면 AT 명령어 표준에서는 "AT"라는 문자열 다음에 '#' 표시가 나오는 명령어는 제조업체 별 자체 규격으로 사용한다고 규정되어 있기 때문이다.
어쨌든 자체 규격이기 때문에 이 규격은 삼성 단말기에서만 가능하며 공개된 규격은 아닌 것으로 알고 있다.
하지만 그렇다고 이 규격을 전혀 알 수 없는 것은 아니다.

삼성 단말기는 'PC Link'라는 단말기 관리 프로그램을 사용할 수 있다. 이 프로그램을 통해 단말기에 저장된 전화 번호를 컴퓨터에 저장할 수도 있고 그밖에 일정 관리 및 문자 메시지 관리 등등을 할 수도 있으며 SMS 전송도 가능하다.

난 이 PC Link에서 단말기에 SMS 전송 명령을 보내는 방법을 알아내기 위해 중간에 USB filter driver를 붙혀서 데이터를 미러링하는 방법을 사용했다. AT 명령어는 문자열이기 때문에 미러링만 한다면 해당 명령어를 식별하는 것은 일도 아니다.
이렇게 미러링을 이용하면 PC Link의 모든 기능을 구현 가능하다. 어차피 AT 명령어를 송/수신 하는 것은 간단한 시리얼 통신이고 중요한 것은 어떤 기능에 어떤 AT 명령어를 사용해야 하느냐 하는 프로토콜 규격인 것이다.

어쨌든 이렇게 해서 알아낸 SMS 전송 관련 명령어는 아래와 같다.

AT#PMODE=1 -> 단말기를 PC Link 모드로 변환하는 명령어
AT#PSTRM=%s,%s,3,"%s",0,0,0, 4098 -> SMS 수신 명령어, %s 에 해당하는 부분에 차례대로 발신자 전화번호, 수신자 전화 번호, SMS 문자메시지 내용을 입력하면 된다.
AT#PMODE=0 -> 단말기를 원래 상태로 돌려놓는 명령어

참고로 AT명령어는 각 명령어의 끝에 CR(Carriage Return) 문자를 붙혀야 한다.

이렇게 하면 컴퓨터에 단말기를 연결해서 SMS 전송을 할 수 있는 프로그램을 만들 수 있다.
물론 그 외에도 단말기의 전화번호 내용이나 문자 메시지 내용 검색 등등도 관련 AT 명령어만 알면 가능하다. 궁금하면 PC Link 프로그램을 후킹하거나 나처럼 USB 포트를 미러링하거나 혹은 데이터 케이블 선을 중간에 따서 물리적인 복사를 해도 된다...

p.s 이 방법이 최근에 나온 삼성 단말기에서도 아직 유효한지는 모르겠다. 앞 부분에서 언급한대로 2년 전에 사용했던 방법이니까...근데 아마 삼성도 특별한 이유가 없는 한 규격을 바꾸지는 않을 것 같다...

by silverbird | 2005/11/02 11:46 | 프로그래밍 | 트랙백(1) | 덧글(3)

트랙백 주소 : http://Agbird.egloos.com/tb/833938
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from the World of.. at 2009/05/11 15:16

제목 : 컴퓨터에서 SMS 전송하기
컴퓨터에서 SMS 전송하기......more

Commented by 조강현 at 2007/06/15 17:46
sms 전송관련한 이 내용을 아마도 수십번은 읽어본듯합니다.
usb미러링하는 방법을 알고 싶어 이렇게 글 올립니다.
나름대로 usb cable을 잘라 시도해 보았는데
핸드폰+usb 케이블을 분리해서 두 컴퓨터에 연결할때
서로 충돌이 생겨서 comm port가 생성되었다 없어졌다 해요
미러링하는 방법을 자세히 좀 알려주세요
감사합니다
Commented by silverbird at 2007/06/15 21:37
//조강현
저는 usb미러링을 위해서 위 글에서도 언급했듯이 윈도우즈에서 usb filter driver를 만들어서 사용했습니다. 윈도우즈 filter driver를 만들기 위해서는 디바이스 드라이버 프로그래밍에 대해 알아야 합니다. 디바이스 드라이버 프로그래밍에 대한 보다 자세한 정보는 http://agbird.egloos.com/3368300 이 글에 첨부된 자료나 http://www.kosr.org/ 에서 알아보세요...
Commented at 2007/06/20 21:54
비공개 덧글입니다.

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>