View Full Version : سوال: به دست آوردن IP اینترنت با vb
  
shahram_g
دوشنبه 16 بهمن 1391, 15:07 عصر
درود.
می خواستم بدونم چطوری میشه IP اینترنتی که باهاش داریم کار می کنیم رو با VB به دست آورد؟
منظورم البته IP local نیست که با CMD میشه دید.بلکه IP هست که ISP به شما میده.
سپاس
mehran901
دوشنبه 16 بهمن 1391, 15:44 عصر
با وینساک دوست عزیز !
shahram_g
دوشنبه 16 بهمن 1391, 16:09 عصر
تا جایی که می دونم اون local ip میده.
شما کدی داری؟
the king
دوشنبه 16 بهمن 1391, 18:54 عصر
درود.
می خواستم بدونم چطوری میشه IP اینترنتی که باهاش داریم کار می کنیم رو با VB به دست آورد؟
منظورم البته IP local نیست که با CMD میشه دید.بلکه IP هست که ISP به شما میده.
سپاس
یک پروژه جدید در ویژوال بیسیک باز کنید. ترکیب کلیدی Ctrl + T رو فشار دهید (منوی Project، گزینه ...Components) و
در لیست کمپوننت ها Microsoft Internet Transfer Control (فایل MSINET.OCX) رو تیک بزنید و OK کنید.
یک نمونه از کنترل اش رو که الان در پنجره Toolbox اضافه شده روی فرم تان قرار دهید ( با نام Inet1 اضافه میشه)
Private Sub Form_Load()
    Dim text As String, hostStart As Integer
    Dim hostEnd As Integer, ip As String
    text = Inet1.OpenURL("http://smart-ip.net/geoip-xml", icString)
    hostStart = InStr(1, text, "<host>", vbTextCompare)
    hostEnd = InStr(hostStart + 1, text, "</host>", vbTextCompare)
    If hostStart >= 1 And hostEnd > hostStart Then
        ip = Trim(Mid(text, hostStart + 6, hostEnd - hostStart - 6))
        MsgBox ip
    End If
End Sub
حمید محمودی
دوشنبه 16 بهمن 1391, 19:16 عصر
سلام،
یک پروژه جدید در ویژوال بیسیک باز کنید. ترکیب کلیدی Ctrl + T رو فشار دهید (منوی Project، گزینه ...Components) و
در لیست کمپوننت ها Microsoft Internet Transfer Control (فایل MSINET.OCX) رو تیک بزنید و OK کنید.
یک نمونه از کنترل اش رو که الان در پنجره Toolbox اضافه شده روی فرم تان قرار دهید ( با نام Inet1 اضافه میشه)بهتره که از این روش استفاده نشه؛ چون ما اینجا از یک سایت کمک میگیریم و آی پی ما توسط سایت شناخته میشه و میایم اون آی پی رو تشخیص میدیم (با گرفتن سورس صفحه)؛ به همین جهت، به هر دلیلی (از جمله Down بودن سایت، کند بودن سرعت اتصال به اینترنت و ... ) نتونیم اون صفحه رو بخونیم، کاربر به مشکل بر خواهد خورد؛
بنابراین بهتره که به صورت مستقیم آی پی تشخیص داده بشه؛
Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long
' Returns an array with the local IP addresses (as strings).
' Author: Christian d'Heureuse, www.source-code.biz
Public Function GetIpAddrTable()
   Dim Buf(0 To 511) As Byte
   Dim BufSize As Long: BufSize = UBound(Buf) + 1
   Dim rc As Long
   rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
   If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
   Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
   If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function
   ReDim IpAddrs(0 To NrOfEntries - 1) As String
   Dim i As Integer
   For i = 0 To NrOfEntries - 1
      Dim j As Integer, s As String: s = ""
      For j = 0 To 3: s = s & IIf(j > 0, ".", "") & Buf(4 + i * 24 + j): Next
      IpAddrs(i) = s
      Next
   GetIpAddrTable = IpAddrs
   End Function
' Test program for GetIpAddrTable.
Public Sub Test()
   Dim IpAddrs
   IpAddrs = GetIpAddrTable
   Debug.Print "Nr of IP addresses: " & UBound(IpAddrs) - LBound(IpAddrs) + 1
   Dim i As Integer
   For i = LBound(IpAddrs) To UBound(IpAddrs)
      Debug.Print IpAddrs(i)
      Next
   End Sub
یا اگر بصورت WMI میخواید کار کنید،
Public Function getIP()
Dim WMI     As Object
Dim qryWMI  As Object
Dim Item    As Variant
    Set WMI = GetObject("winmgmts:\\.\root\cimv2")
    Set qryWMI = WMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration " & _
                               "WHERE IPEnabled = True")
    For Each Item In qryWMI
      getIP = Item.IPAddress(0)
    Next
    Set WMI = Nothing
    Set qryWMI = Nothing
End Function
http://www.source-code.biz/snippets/vbasic/8.htm
http://stackoverflow.com/questions/13755880
vahid4251
دوشنبه 16 بهمن 1391, 19:16 عصر
بچه ها به این پستم یک نگاه بندازین
http://barnamenevis.org/showthread.php?382493-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%B4%D8%AF%D9%86-%D8%A8%D9%87-%D8%B3%D8%A7%DB%8C%D8%AA
the king
دوشنبه 16 بهمن 1391, 19:31 عصر
سلام،
بهتره که از این روش استفاده نشه؛ چون ما اینجا از یک سایت کمک میگیریم و آی پی ما توسط سایت شناخته میشه و میایم اون آی پی رو تشخیص میدیم (با گرفتن سورس صفحه)؛ به همین جهت، به هر دلیلی (از جمله Down بودن سایت، کند بودن سرعت اتصال به اینترنت و ... ) نتونیم اون صفحه رو بخونیم، کاربر به مشکل بر خواهد خورد؛
بنابراین بهتره که به صورت مستقیم آی پی تشخیص داده بشه؛
Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long
' Returns an array with the local IP addresses (as strings).
' Author: Christian d'Heureuse, www.source-code.biz
Public Function GetIpAddrTable()
   Dim Buf(0 To 511) As Byte
   Dim BufSize As Long: BufSize = UBound(Buf) + 1
   Dim rc As Long
   rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
   If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
   Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
   If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function
   ReDim IpAddrs(0 To NrOfEntries - 1) As String
   Dim i As Integer
   For i = 0 To NrOfEntries - 1
      Dim j As Integer, s As String: s = ""
      For j = 0 To 3: s = s & IIf(j > 0, ".", "") & Buf(4 + i * 24 + j): Next
      IpAddrs(i) = s
      Next
   GetIpAddrTable = IpAddrs
   End Function
' Test program for GetIpAddrTable.
Public Sub Test()
   Dim IpAddrs
   IpAddrs = GetIpAddrTable
   Debug.Print "Nr of IP addresses: " & UBound(IpAddrs) - LBound(IpAddrs) + 1
   Dim i As Integer
   For i = LBound(IpAddrs) To UBound(IpAddrs)
      Debug.Print IpAddrs(i)
      Next
   End Sub
یا اگر بصورت WMI میخواید کار کنید،
Public Function getIP()
Dim WMI     As Object
Dim qryWMI  As Object
Dim Item    As Variant
    Set WMI = GetObject("winmgmts:\\.\root\cimv2")
    Set qryWMI = WMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration " & _
                               "WHERE IPEnabled = True")
    For Each Item In qryWMI
      getIP = Item.IPAddress(0)
    Next
    Set WMI = Nothing
    Set qryWMI = Nothing
End Function
http://www.source-code.biz/snippets/vbasic/8.htm
http://stackoverflow.com/questions/13755880
 
این کد هایی که ارائه کردید همون Local IP ها هستند، مثلا 127.0.0.1 و 192.168.1.101 و ...
ارتباطی با IP کاربر در اینترنت نداره. سیستم می تونه IP ای رو اعلام کنه که سرویس دهنده اینترنتی 
بهش اختصاص داده و بین کاربر و سرویس دهنده مورد استفاده قرار می گیره.
IP کاربر در اینترنت از ارتباط بین سرویس دهنده و اینترنت بدست اومده و جزو مواردی نیست
که بدون کمک از سایت های اینترنتی بدست کاربر برسه.
حقیقتا اگر بدون کمک یک سرور در اینترنت می توانستیم IP رو در اینترنت بدست بیاوریم 
اینقدر سایت هایی که این سرویس رو ارائه می کنند طرفدار نداشتند و مجبور نمی شدند
برای رهایی از دست ربات ها و برنامه نویسان صد جور کد حفاظتی بنویسند.
حمید محمودی
دوشنبه 16 بهمن 1391, 20:12 عصر
این کد هایی که ارائه کردید همون Local IP ها هستند، مثلا 127.0.0.1 و 192.168.1.101 و ...
ارتباطی با IP کاربر در اینترنت ندارهگرچه معایبی که عرض کردم، برای روشی که گفته شد پابرجاست؛ اما  حق با شماست؛ حواسم نبود؛ این ها نتیجه خوندن یک کتاب قطور در یک روزه :لبخند:
البته یک روش دیگه برای اینکار میتونه استفاده از Embedded Command Console باشه؛ و نتیجه مستقیما در برنامه نمایش پیدا کنه؛
و همچنین اگه قرار هست از روشی که ذکر شد، استفاده بشه؛ شاید بهتر باشه به نحوی کار بشه که یک نوع Flexibility در کد در نظر گرفته بشه؛ به این صورت که اگر ارتباط با هاستی برقرار نشد، یک هاست دیگه رو با مکانیزم دیگه ای، سورس صفحه خونده بشه و نتیجه به کاربر اعلام بشه؛ یا حتی یک اسکریپت ساده PHP (برای تشخیص آی پی) نوشته بشه و در هاست شخصی مطمئن (در صورت وجود) آپلود بشه و نتیجه از اون فایل خونده بشه و به کاربر نمایش داده بشه....
mehran901
دوشنبه 16 بهمن 1391, 21:45 عصر
خب ی کارسادش وینساکه ! درضمن آیپی آدرسی که شما میخوای رو میده 
Winsock.LocalIP
تست کن
آیپی آدرس  ISP میده نه Local Ip Address!!!!
m2011kh
دوشنبه 16 بهمن 1391, 23:14 عصر
من امتحان کرم IP Localv رو داد نه ایپی که ISP میده.
mehran901
دوشنبه 16 بهمن 1391, 23:27 عصر
اونوقت اینجا چرا فرق داره؟! جالب شد .... کی میدونه موضوع چیه ؟
niksalehi
سه شنبه 17 بهمن 1391, 01:36 صبح
بله، وینساک local ip میده
mehran901
سه شنبه 17 بهمن 1391, 02:59 صبح
خب از اسم این پروسیجرش هم معلومه ولی مگه میشه رو پی سی من آیپی ISP میده درصورتی که آیپی local کاملا متفاوته! چ جالب شد خب خوب شد گفتین قرار بود یجا استفاده کنم ، موضوع چیه... کسی میدونه
shahram_g
سه شنبه 17 بهمن 1391, 10:35 صبح
یک پروژه جدید در ویژوال بیسیک باز کنید. ترکیب کلیدی Ctrl + T رو فشار دهید (منوی Project، گزینه ...Components) و
در لیست کمپوننت ها Microsoft Internet Transfer Control (فایل MSINET.OCX) رو تیک بزنید و OK کنید.
یک نمونه از کنترل اش رو که الان در پنجره Toolbox اضافه شده روی فرم تان قرار دهید ( با نام Inet1 اضافه میشه)
Private Sub Form_Load()
    Dim text As String, hostStart As Integer
    Dim hostEnd As Integer, ip As String
    text = Inet1.OpenURL("http://smart-ip.net/geoip-xml", icString)
    hostStart = InStr(1, text, "<host>", vbTextCompare)
    hostEnd = InStr(hostStart + 1, text, "</host>", vbTextCompare)
    If hostStart >= 1 And hostEnd > hostStart Then
        ip = Trim(Mid(text, hostStart + 6, hostEnd - hostStart - 6))
        MsgBox ip
    End If
End Sub
با سپاس از شما.
ظاهرا این روش متداولترین و مرسوم ترین روش هست.
من هم تو یه سایت خارجی یه کد پیدا کردم که IP رو از سایت های مختلف می تونه بگیره.فایل رو پیوست می کنم.
farshid_king_r
چهارشنبه 29 خرداد 1392, 16:45 عصر
خب از اسم این پروسیجرش هم معلومه ولی مگه میشه رو پی سی من آیپی ISP میده درصورتی که آیپی local کاملا متفاوته! چ جالب شد خب خوب شد گفتین قرار بود یجا استفاده کنم ، موضوع چیه... کسی میدونه
 
سلام
داشتم يه دوري ميزدم پست شما رو ديدم
فرقش تو نحوه كانفيگ مودم هست 
يعني چي ؟
اگه برين اي پي كانكشنتون رو ببينين .Local دقيقا همون ايپي رو ميده
منظور از كانفيگ مودم هم Bridging  و  PPPOE هست
موفق باشيد
javaweb341
چهارشنبه 29 خرداد 1392, 20:01 عصر
با سلام:قلب:
دوست عزیز به نظر من این کار را به وسیله ی php انجام بده،من خودم قبلا نیاز داشتم این کارو کردم:
کد های زیر را در Notepad کپی کن و آن را با نام ip.php ذخیره کن
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$online = $_SERVER['REMOTE_ADDR'];
echo"<input name=\"IP\" type=\"text\" value=$online />";
?>
</body>
</html>
حال فایل php رو در اینترنت روی سرور آپ کن و کد های زیر رو در vb قرار بده
یکWebBrowser روی فورم قرار بده بعد کد های زیر :
در Form_Load :
Private Sub Form_Load()
WebBrowser1.Navigate "http://آدرس سايت/ip.php"
End Sub
و یک Command و یک Text قرار بده و کد زیر را در Command قرار بده
Private Sub Command1_Click()
Text1.Text = WebBrowser1.Document.All.Item("IP").Value
End Sub
خوب این نظر من بود:چشمک:
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.