回 帖 发 新 帖 刷新版面

主题:VB怎么获取本机IP、网关等参数?

如题,用VB怎么获取主机的IP、子网掩码、网关、DNS等参数?

回复列表 (共9个回复)

沙发

使用最基本的命令行.
IPCONFIG.

执行 ipconfig /all 后会显示网络所有相关信息.

我网上找了很多关于获得MAC码的程序.
发现程序不稳定.很多时候根本不起作用.

后来我用下面的方法.

程序流程::

打开文件 F1 以写入.文件F1文件名为 U.BAT.
向文件F1中写入命令行. "ipconfig /all > u.x"
意思就是把生成的结果放到文件U.X中.这个名任意.
关闭文件F1.
执行 SHELL 函数.
X=SHELL("U.BAT",HIDE)  '参数好象不是这么写的.意思就是隐藏运行U.BAT.
SLEEP 200    '等待一会.不要马上进行下面操作.这个过程会有延时.
打开文件F2 以读取 .文件F2文件名为第一步里面的U.X.
读取一行放入字符串 S 中.
用INSTR 函数查看在S中是不是包含 前导字符.
比如你要获取IP.
在文件中肯定会有一行 IP地址........: XXX.XX.XX.XX
查找冒号前面的字符是否存在.要是存在.则截取冒号后面的字符.就是你要的结果了.

最后关闭文件F2.


要是还不明白可以加我Q交流.

板凳


这个方法我也懂用,只是我的程序的用途是防别人修改我的IP、网关等配置信息,这就要每隔一定的时间就检查一下IP配置信息,这样每检查一次又要往硬盘里写IPconfig里的内容,频繁对硬盘进行读写,我觉得这也不是一个很好的办法……

还有没有其它办法??

3 楼

刚看了一个例子,用winsock.localIP就能得以IP地址,不过网关却不行

学VB下了很多例程,有取IP的一个,看不懂,大意应该是读注册表,然后改为十进制,这个想法我想很适合你

同时在这儿也问下,网关怎么得到?修改呢?(偷着用单位的机子上外网,但每回IP和网关都要修改,能不能弄个自动修改的?网上下的取IP的例子大多没有修改的选项,那位有这方面的给个

4 楼

用注册表!下面是我编的一个小程序,适用XP系统,但我运行时总是提示0x77da7904指令引用的0x0000008内存不能被read!郁闷中谁能说下为什么?
 Option Explicit
 Const REG_SZ As Long = 1
 Const HKEY_LOCAL_MACHINE = &H80000002

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
    (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
    (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
    ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
    lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Dim aaa As String


Private Sub Command1_Click()
Dim hKey As Long, hKey1 As Long, hKey2 As Long, ret As Long, ret1 As Long, lenData As Long, typeData As Long
Dim Name As String, name1 As String, name2 As String, s As String, S1 As String
Dim name3, name4, s2, s3 As String
Dim ret2, ret3 As Long
Dim idx As Integer
idx = 0
Name = String(256, Chr(0))
RegCreateKey HKEY_LOCAL_MACHINE, "SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces", hKey
Text1.Text = hKey
Do
ret = RegEnumKey(hKey, idx, Name, Len(Name))
If ret = 0 Then
aaa = Left(Name, InStr(Name, Chr(0)) - 1)
aaa = "SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\" & aaa
ret = RegOpenKey(HKEY_LOCAL_MACHINE, aaa, hKey)
'获得IP地址
If ret = 0 Then
  name1 = "IPAddress"
  name2 = "SubnetMask"
 name3 = "DefaultGateway"
 name4 = "NameServer"
   
   ret = RegQueryValueEx(hKey, name1, 0, typeData, ByVal vbNullString, lenData)
   s = String(lenData, Chr(0))
   RegQueryValueEx hKey, name1, 0, typeData, ByVal s, lenData
  If s <> "" Then s = Left(s, InStr(s, Chr(0)) - 1)
  '获得子网掩码
   ret1 = RegQueryValueEx(hKey, name2, 0, typeData, ByVal vbNullString, lenData)
   S1 = String(lenData, Chr(0))
   RegQueryValueEx hKey, name2, 0, typeData, ByVal S1, lenData
   If S1 <> "" Then S1 = Left(S1, InStr(S1, Chr(0)) - 1)
'获取网关
 ret2 = RegQueryValueEx(hKey, name3, 0, typeData, ByVal vbNullString, lenData)
   s2 = String(lenData, Chr(0))
   RegQueryValueEx hKey, name3, 0, typeData, ByVal s2, lenData
   If s2 <> "" Then s2 = Left(s2, InStr(s2, Chr(0)) - 1)
  '获取DNS服务器
    ret3 = RegQueryValueEx(hKey, name4, 0, typeData, ByVal vbNullString, lenData)
   s3 = String(lenData, Chr(0))
   RegQueryValueEx hKey, name4, 0, typeData, ByVal s3, lenData
   If s3 <> "" Then s3 = Left(s3, InStr(s3, Chr(0)) - 1)

If Val(s) > 0 Then
   Text1.Text = s
   Text2.Text = S1
   Text3.Text = s2
   Text4.Text = s3
   Command2.Enabled = True
   Exit Sub
End If
End If
idx = idx + 1
End If
Loop Until ret <> 0
End Sub
Private Sub Command2_Click()
  Dim hKey As Long
     If Text1.Text <> "" Then
        RegCreateKey HKEY_LOCAL_MACHINE, aaa, hKey
'       修改IP地址
        RegSetValueEx hKey, "IPAddress", 0, REG_MULTI_SZ, ByVal Text1.Text, 13
'       修改子网掩码
        RegSetValueEx hKey, "SubnetMask", 0, REG_MULTI_SZ, ByVal Text2.Text, 13
        '修改网关
        RegSetValueEx hKey, "DefaultGateway", 0, REG_MULTI_SZ, ByVal Text3.Text, 13
        '修改服务器
        RegSetValueEx hKey, "NameServer", 0, REG_MULTI_SZ, ByVal Text4.Text, 13
        RegCloseKey hKey
     End If
End Sub

Private Sub Command3_Click()
  End
End Sub

5 楼

楼主.
我再给你出个方法.
你2个网段是一个能上网一个上不了网的.
你要得到网关也是为了检测机器是不是能上网而已.

这样.
使用WINSOCK.连接一台在公网上的机器 .看看是不是能连接 上就OK 了.

可以使用WINSOCK连接一台网上的机器.
比如.连接 www.163.com 的 80 端口.
163网页能打开肯定 80 要 LISTENING 的.

你每隔一段时间连一下163.如果能连上了.说明能上网了.

这样的话.不管他把网关改成什么.程序都能达到目的.

而你要做的.就是保护好程序自身.别让人给结束任务了就行.

这种操作不需要写硬盘.并且速度很快.

如果楼主能看到.并且方案可行.记得给点分...嘿嘿...

上次聊过的.
我怎么找不到你QQ了?

6 楼

5楼方法可行,不过我现在想到一种更好的办法!(也是基于你的方法思路!~)

在教学系统里写一个VB程序ping网吧系统的网关,通,说明配置被人修改,不通则正常~!
速度更快又不占网吧带宽!~

问题算是解决了!~若能用VB获得主机的网关,问题更好解决~!
不过怎么用VB获得自已主机的网关地址,至今还没有得到满意的答案!……

7 楼

获得主机IP的方法网上一大堆,但在不能用IPCONFIG的前提下获得网关的方法至今还没找到!!
郁闷当中……

8 楼

还有一种方法.
使用IPCONFIG.
但不写文件.
以前我做过一个C写的命名管道.
就是程序运行一个后台的CMD.
然后使用一个共享内存区交换数据.
你直接把命令写入交换区放入CMD中执行.
执行后的输出在另一个交换区出现.
结果和写文件是一样的.
只是不写硬盘而已.
这个技术在黑客软件中用来做CMD后门程序.
我照书做了一个.可以运行.

9 楼

好深奥!现在水平有限!
日后一定回来研究这番话!~

我来回复

您尚未登录,请登录后再回复。点此登录或注册