'forward'에 해당되는 글 2건

  1. 2013.07.24 UPnP - 포토 포워딩 설정 (Delphi 버전)
  2. 2013.07.24 UPnP - 포토 포워딩 설정

Visual C++로 작성 된 http://ryulib.tistory.com/287 소스에 대한 델파이 버전입니다.  공유기가 UPnP를 지원 할 경우, 코딩으로 포트 포워딩을 해주는 유닛입니다.


[그림 1] 실행 결과




유닛 소스


http://goo.gl/PVIWTs




필요한 DLL


libPortForward.7z




DLL에 대한 소스  (VC++)


libPortForward.7z




사용법 (예제)

unit _fmMain;

interface

uses
  PortForward,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TfmMain = class(TForm)
    Panel1: TPanel;
    moMsg: TMemo;
    btOpen: TButton;
    btOpenUsingThread: TButton;
    procedure btOpenClick(Sender: TObject);
    procedure btOpenUsingThreadClick(Sender: TObject);
  private
    procedure do_WM_SetPortForwarding(var AMsg:TMessage); message WM_SetPortForwarding;
  public
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

procedure TfmMain.btOpenClick(Sender: TObject);
var
  iErrorCode, ExternalPort : integer;
begin
  ExternalPort := 658;

  iErrorCode := SetPortForwarding( '192.168.10.13', 'Ryu', 658, ExternalPort );

  moMsg.Lines.Add( Format('iErrorCode=%d, , ExternalPort=%d', [iErrorCode, ExternalPort]) );
end;

procedure TfmMain.btOpenUsingThreadClick(Sender: TObject);
begin
  SetPortForwarding( Handle, '192.168.10.13', 'Ryu', 658, 658 );
end;

procedure TfmMain.do_WM_SetPortForwarding(var AMsg: TMessage);
begin
  moMsg.Lines.Add( Format('iErrorCode=%d, , ExternalPort=%d', [AMsg.WParam, AMsg.LParam]) );
end;

end.

6: 라인과 같이 PortForward 유닛을 추가합니다.


19: 라인은 비동기 식으로 처리 결과를 받고자 할 때 필요합니다.  함수를 호출하고 바로 결과를 얻고자 할 때는 필요 없습니다.  다만, 함수를 호출하고 바로 결과를 얻고자 할 때는 결과를 오랫 동안 기다려야 하는 경우도 발생합니다.


36: 라인에서는 SetPortForwarding 함수를 이용해서 '192.168.10.13' 주소의 내부 포트 658을 공유기의 외부 포트 658로 포워딩 해줍니다.  iErrorCode가 0 이면 성공이고 이외의 숫자는 모두 실패를 뜻 합니다.


43: 라인에서는 유사항 동작을 스레드를 이용해서 비동기식으로 결과를 알아옵니다.  결과는 메시지를 통해서 Handle 을 가지고 있는 객체에게 전달 됩니다.


48: SetPortForwarding의 결과가 메시지로 전달 되었습니다.  WParam에는 에러 코드가, LParam에는 실제 오픈 된 외부 포트가 전달 됩니다.


공유기의 외부 포트 658을 요청했다고 해도 반드시 658일 오픈되지는 않습니다.  이미 다른 곳에서 사용 중이라면 다른 포트가 오픈됩니다.



예제 전체 소스:   http://goo.gl/djcJtu






Posted by 류종택

실행파일


PortForward.7z


  • 사용법
    • C:\>  PortForward.exe  [자신의 IP]  [상세 설명, 아무거나 공백 없이]  [내부 포트]  [외부 포트]
    • 공유기의 포트 포워딩을 설정해 줍니다.
    • 외부 포트가 이미 사용 중이면 1씩 증가하면서 빈 포트를 찾아서 처리합니다.
    • 파라메터 틀리면 경고 없습니다 ㅡ.ㅡ;
    • errorCode가 0 이면 성공 나머진 에러입니다.  (에러 코드는 소스 참조)



[소스 1] main 함수

#include "stdafx.h"
#include "UPnPUtils.h"

int _tmain(int argc, _TCHAR* argv[])
{
	char localIP[256];
	WideCharToMultiByte(CP_ACP, 0, argv[1], 256, localIP, 256, NULL, NULL);

	char description[256];
	WideCharToMultiByte(CP_ACP, 0, argv[2], 256, description, 256, NULL, NULL);

	int iInternalPort = _tstoi(argv[3]);
	int iExternalPort = _tstoi(argv[4]);

	printf( "* SetPortForwarding: localIP=%s,  description=%s, iInternalPort=%d, iExternalPort=%d \n", localIP,  description, iInternalPort, iExternalPort );

	int errorCode = SetPortForwarding( localIP,  description, iInternalPort, &iExternalPort );

	printf( "* Result: errorCode=%d, iInternalPort=%d, iExternalPort=%d \n", errorCode, iInternalPort, iExternalPort );

	return 0;
}

SetPortForwarding() 함수에 각각 [자신의 IP]  [상세 설명]  [내부 포트]  [외부 포트] 파라메터를 넣어주고 실행하면 끝입니다.  결과는 정수로 리턴 받습니다.



전체 소스

Source.7z



'프로그래밍 > C & C++' 카테고리의 다른 글

Can't build boost 1.55 under OSX Mavericks + Xcode 5  (0) 2014.04.12
UPnP - 포토 포워딩 설정  (0) 2013.07.24

Posted by 류종택


티스토리 툴바