Есть локальная сеть, в которой мой Windows 7 (IP 192.168.0.X/24). На нем запущена VirtualBox с установленной Ubuntu, посаженой на виртуальный сетевой адаптер (на windows IP 192.168.56.1/24, в Ubuntu 192.168.56.Y/24). Мне нужно перенаправить все входящие соединения из 192.168.0.X:ZZZZ на 192.168.56.Y:ZZZZ и обратно (т.е. сделать тунель из одной сети в другую). Вопрос как? | Код | unit uMainForm;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ComCtrlsAdds, Sockets, ComCtrls, IdBaseComponent, IdComponent, IdIPWatch, ScktComp;
type TMainForm = class(TForm) IPAddress1: TIPAddress; IPAddress2: TIPAddress; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Label1: TLabel; GroupBox1: TGroupBox; Label2: TLabel; Button1: TButton; Button2: TButton; TcpClient1: TTcpClient; TcpServer1: TTcpServer; Memo1: TMemo; stat1: TStatusBar; ServerSocket1: TServerSocket; ClientSocket1: TClientSocket; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient); procedure TcpServer1CreateHandle(Sender: TObject); procedure TcpServer1DestroyHandle(Sender: TObject); procedure TcpClient1Receive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer); procedure TcpClient1Connect(Sender: TObject); procedure TcpClient1Disconnect(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } procedure ReadPropertis; procedure LogMessage(const AMessage: string); procedure LogFormatMessage(const AFormat: string; const Args: array of TVarRec); public { Public declarations } end;
var MainForm: TMainForm;
implementation
uses DateUtils, WinSock;
{$R *.dfm}
procedure TMainForm.Button1Click(Sender: TObject); begin ReadPropertis; ServerSocket1.Active := True; ClientSocket1.Active := True; end;
procedure TMainForm.Button2Click(Sender: TObject); begin TcpServer1.Active := False; end;
procedure TMainForm.FormCreate(Sender: TObject); begin ReadPropertis; end;
procedure TMainForm.LogFormatMessage(const AFormat: string; const Args: array of TVarRec); begin LogMessage(Format(AFormat, Args)); end;
procedure TMainForm.LogMessage(const AMessage: string); var time: TDateTime; begin time:= Now; Memo1.Lines.Append(Format('%s.%3.3d: %s', [DateTimeToStr(time), MilliSecondOf(time), AMessage])); end;
procedure TMainForm.ReadPropertis; begin ServerSoket1.Port := SpinEdit1.Value; ClientSocket1.Host := IPAddress2.Address; ClientSocket1.Port := SpinEdit2.Value; end;
procedure TMainForm.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin ClientSocket1.Socket.SendText(Socket.ReceiveText); end;
procedure TMainForm.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin ServerSocket1.Socket.SendText(Socket.ReceiveText); end;
end.
|
Это сообщение отредактировал(а) Saygak - 29.11.2010, 10:00
|