日期:2014-05-18  浏览次数:21447 次

用c#实现建立一个VPN拨号连接并自动拨号
我过些资料,说用RAS库里的RasSetEntryProperties方法可以实现。我写了一个用C#调用rasapi32.dll方法如下:
  [DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
  public extern static int RasSetEntryProperties(
  string phonebook,
  string entry,
  RasEntry rasentry,
  int entryinfosize, 
  int deviceinfo, 
  int deviceinfosize
  );
RasEntry结构定义如下:
  public struct RasEntry
  {
  public int dwSize;
  public int dwfOptions;
  public int dwCountry;
  public int dwCountryCode;
  public byte szAreaCode;
  public byte szLocalPhoneNumber;
  public int dwalternateOffset;
  public RasIpAddr ipaddr;
  public RasIpAddr ipaddrDns;
  public RasIpAddr ipaddrDnsAlt;
  public RasIpAddr ipaddrWins;
  public RasIpAddr ipaddrWinsAlt;
  public int dwFrameSize;
  public int dwfNetProtocols;
  public int dwFramingProtocol;
  public byte szScript;
  public byte szAutodialDll;
  public byte szAutodialFunc;
  public byte szDeviceType;
  public byte szDeviceName;
  public byte szX25PadType;
  public byte szX25Address;
  public byte szX25Facilities;
  public byte szX25UserData;
  public int dwChannels;
  public int dwReserved1;
  public int dwReserved2;
  public int dwSubEntries;
  public int dwDialMode;
  public int dwDialExtraPercent;
  public int dwDialExtraSampleSeconds;
  public int dwHangUpExtraPercent;
  public int dwHangUpExtraSampleSeconds;
  public int dwIdleDisconnectSeconds;
  public int dwType;
  public int dwEncryptionType;
  public int dwCustomAuthKey;
  public GUID guidId;
  public byte szCustomDialDll;
  public int dwVpnStrategy;
  public int dwfOptions2;
  public int dwfOptions3;
  public byte szDnsSuffix;
  public int dwTcpWindowSize;
  public byte szPrerequisitePbk;
  public byte szPrerequesiteEntry;
  public int dwRedialCount;
  public int dwRedialPause;
  }
调用方法代码如下:
  RasEntry re = new RasEntry();
  re.dwSize = Marshal.SizeOf(typeof(RasEntry));
  re.dwCountryCode = 86;
  re.dwDialExtraPercent = 75;
  re.dwDialExtraSampleSeconds = 120;
  re.dwDialMode = 1;
  re.dwEncryptionType = 3;
  re.dwfNetProtocols = 4;
  re.dwfOptions = 1024262928;
  re.dwfOptions2 = 367;
  re.dwFramingProtocol = 1;
  re.dwHangUpExtraPercent = 10;
  re.dwHangUpExtraSampleSeconds = 120;
  re.dwRedialCount = 3;
  re.dwRedialPause = 60;
  re.dwType = 5;
  re.szAreaCode = 10;
  re.szLocalPhoneNumber = 128;
  re.szScript = 259;
  re.szAutodialDll = 259;
  re.szAutodialFunc = 259;
  re.szDeviceType = 16;
  re.szDeviceName = 128;
  re.