3mile 发表于 2011-7-7 16:31:13

$INTERNET_CONNECTION_MODEM          = 0x1
$INTERNET_CONNECTION_LAN            = 0x2
$INTERNET_CONNECTION_PROXY          = 0x4
$INTERNET_CONNECTION_MODEM_BUSY   = 0x8
$INTERNET_RAS_INSTALLED             = 0x10
$INTERNET_CONNECTION_OFFLINE      = 0x20
$INTERNET_CONNECTION_CONFIGURED   = 0x40

    $ret = DllCall("WinInet.dll","int","InternetGetConnectedState","int_ptr",0,"int",0)

    If $ret then
      $sX = "Internet connection found!"
      If BitAND($ret, $INTERNET_CONNECTION_MODEM)      Then $sX = $sX & "MODEM" & @LF
      If BitAND($ret, $INTERNET_CONNECTION_LAN)      Then $sX = $sX & "LAN" & @LF
      If BitAND($ret, $INTERNET_CONNECTION_PROXY)      Then $sX = $sX & "PROXY" & @LF
      If BitAND($ret, $INTERNET_CONNECTION_MODEM_BUSY) Then $sX = $sX & "MODEM_BUSY" & @LF
      If BitAND($ret, $INTERNET_RAS_INSTALLED)         Then $sX = $sX & "RAS_INSTALLED" & @LF
      If BitAND($ret, $INTERNET_CONNECTION_OFFLINE)    Then $sX = $sX & "OFFLINE" & @LF
      If BitAND($ret, $INTERNET_CONNECTION_CONFIGURED) Then $sX = $sX & "CONFIGURED" & @LF
               
      MsgBox(0, "Result:", $sX)
    Else
      MsgBox(0, "Result:", "Not Connected")
      Sleep(2000)
      Exit
    Endif

xyhqqaa 发表于 2011-7-7 16:44:41

看看。。。。

曼菲士 发表于 2011-7-7 17:18:04

本帖最后由 曼菲士 于 2011-7-7 17:25 编辑


3mile 发表于 2011-7-7 16:31 http://www.autoitx.com/images/common/back.gif


我的是联通4M专线,通过路由器出去,应属NAT方式,测试结果 $ret =1,$ret =0,结果显示

3mile 发表于 2011-7-7 19:13:29

回复 18# 曼菲士
$INTERNET_CONNECTION_MODEM = 0x1
$INTERNET_CONNECTION_LAN = 0x2
$INTERNET_CONNECTION_PROXY = 0x4
$INTERNET_CONNECTION_MODEM_BUSY = 0x8
$INTERNET_RAS_INSTALLED = 0x10
$INTERNET_CONNECTION_OFFLINE = 0x20
$INTERNET_CONNECTION_CONFIGURED = 0x40

$ret = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)

If $ret Then
        $sX = "Internet connection found!"
        If BitAND($ret, $INTERNET_CONNECTION_MODEM) Then $sX = $sX & "MODEM" & @LF
        If BitAND($ret, $INTERNET_CONNECTION_LAN) Then $sX = $sX & "LAN" & @LF
        If BitAND($ret, $INTERNET_CONNECTION_PROXY) Then $sX = $sX & "PROXY" & @LF
        If BitAND($ret, $INTERNET_CONNECTION_MODEM_BUSY) Then $sX = $sX & "MODEM_BUSY" & @LF
        If BitAND($ret, $INTERNET_RAS_INSTALLED) Then $sX = $sX & "RAS_INSTALLED" & @LF
        If BitAND($ret, $INTERNET_CONNECTION_OFFLINE) Then $sX = $sX & "OFFLINE" & @LF
        If BitAND($ret, $INTERNET_CONNECTION_CONFIGURED) Then $sX = $sX & "CONFIGURED" & @LF
        If $ret = 0 Then $sX = _GetNetworkConnect() & @LF
        MsgBox(0, "Result:", $sX)
Else
        MsgBox(0, "Result:", "Not Connected")
        Sleep(2000)
        Exit
EndIf

Func _GetNetworkConnect()
    Local Const $NETWORK_ALIVE_LAN = 0x1
    Local Const $NETWORK_ALIVE_WAN = 0x2
    Local Const $NETWORK_ALIVE_AOL = 0x4
   
    Local $aRet, $iResult   
    $aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0)   
    If BitAND($aRet, $NETWORK_ALIVE_LAN) Then $iResult &= "LAN connected" & @LF
    If BitAND($aRet, $NETWORK_ALIVE_WAN) Then $iResult &= "WAN connected" & @LF
    If BitAND($aRet, $NETWORK_ALIVE_AOL) Then $iResult &= "AOL connected" & @LF   
    Return $iResult
EndFunc

freedom 发表于 2011-7-7 20:19:57

本帖最后由 freedom 于 2011-7-7 20:21 编辑

回去测试一下! LANWANAOL connected   能不能解释一下?

lan 局域网连接?
wan 城域网连接?
AOL?

freedom 发表于 2011-7-8 03:00:37

回复 19# 3mile

这个脚本好像有点问题,只要我把本地连接设个IP,ADSL拨号的时候就会出现。


而且有VPN连接的时候,一样会提示WAN连接方式。

freedom 发表于 2011-7-8 05:50:50

本帖最后由 freedom 于 2011-7-8 06:05 编辑

这个是跟据3mile   大侠的脚本修改的。

   
$ret = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)
$sX = "NAT"
If $ret Then
      If $ret = 0 Then _GetNetworkConnect()
      MsgBox(0, "提示:", "您的上网方式为:"&$sX)
Else
      MsgBox(0, "提示:", "您的机器没有网络连接!")
      Sleep(2000)
      Exit
EndIf

Func _GetNetworkConnect()
    Local Const $NETWORK_ALIVE_LAN = 0x1
    Local Const $NETWORK_ALIVE_WAN = 0x2
    Local Const $NETWORK_ALIVE_AOL = 0x4
    Local $aRet, $iResult   
    $aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0)   
    $sX   = "NAT"
        $lan= BitAND($aRet, $NETWORK_ALIVE_LAN)
    $adsl = BitAND($aRet, $NETWORK_ALIVE_WAN)
    If $adsl > $lan Then $SX="ADSL"
EndFunc

freedom 发表于 2011-7-8 05:58:02

有没有朋友帮忙测试一下,看看准确不?

netegg 发表于 2011-7-8 08:45:47

回复 23# freedom
查了查wiki, 有个疑问, nat是联网方式吗

pcbar 发表于 2011-7-8 09:00:25

继续猜测
获取本机网关,tracert www.baidu.com 获取第一个节点的ip,如果与网关相同,则nat,否则adsl或wan

forestchi 发表于 2011-7-8 14:27:26

留个脚印~~~~~~~~

freedom 发表于 2011-7-8 15:59:24

本帖最后由 freedom 于 2011-7-8 18:52 编辑

回复 24# netegg


对啊,一般通过路由器上网的应该都是nat方式上网。

freedom 发表于 2011-7-8 18:51:40

本帖最后由 freedom 于 2011-7-8 18:53 编辑

回复 25# pcbar


超版,给段代码?? 如果是ADSL上网,本地连接没有设IP。tracert 返回值对比网关怎么对比?

pcbar 发表于 2011-7-9 08:58:24

回复pcbar


超版,给段代码?? 如果是ADSL上网,本地连接没有设IP。tracert 返回值对比网关怎么对比 ...
freedom 发表于 2011-7-8 18:51 http://www.autoitx.com/images/common/back.gifTrayTip("正在跟踪路由...", "检测数据包经过的第一个节点,根据您的网络情况耗时不等,请稍候。。。", 10)
RunWait(@ComSpec & " /c " & "tracert www.baidu.com /h 1 >c:\bar.txt",@TempDir,@SW_HIDE)
$txt = FileRead("c:\bar.txt")
$ip = StringRegExp($txt, "(((2\d|25|?\d\d?)\.){3}(2\d|25|?\d\d?))", 3)
If IsArray($ip) Then
        If sy($ip) Then
        TrayTip("检测完成", "数据包经过的第一个路由节点是:"&$ip&";私有ip,您处于内网", 10)
        MsgBox(64,"完成","NAT方式上网")
Else
        TrayTip("检测完成", "数据包经过的第一个路由节点是:"&$ip&";公有ip,您处于外网", 10)
        MsgBox(64,"完成","非NAT方式上网")
EndIf
Else
        MsgBox(16,"出错","未连网或其它未知错误!!")
EndIf
FileDelete("c:\bar.txt")

Func sy($_ip);;判断$_ip是否为私有地址
        Local $t
        $t = "10"
        $t = "192.168"
        For $i = 2 To 17
                $t[$i] = "172." & ($i + 14)
        Next
        For $j = 0 To 17
                If StringInStr($_ip, $t[$j]) = 1 Then Return True
        Next
        Return False
EndFunc   ;==>sy
试试看

wzhen1210 发表于 2011-7-9 20:04:43

顶帖,期待。
页: 1 [2] 3
查看完整版本: 求助,关于判断联网方式