PDA

View Full Version : سوال: به دست آوردن IP اینترنت با vb



shahram_g
دوشنبه 16 بهمن 1391, 14:07 عصر
درود.
می خواستم بدونم چطوری میشه IP اینترنتی که باهاش داریم کار می کنیم رو با VB به دست آورد؟
منظورم البته IP local نیست که با CMD میشه دید.بلکه IP هست که ISP به شما میده.
سپاس

mehran901
دوشنبه 16 بهمن 1391, 14:44 عصر
با وینساک دوست عزیز !

shahram_g
دوشنبه 16 بهمن 1391, 15:09 عصر
تا جایی که می دونم اون local ip میده.
شما کدی داری؟

the king
دوشنبه 16 بهمن 1391, 17: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, 18: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, 18: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, 18: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, 19:12 عصر
این کد هایی که ارائه کردید همون Local IP ها هستند، مثلا 127.0.0.1 و 192.168.1.101 و ...
ارتباطی با IP کاربر در اینترنت ندارهگرچه معایبی که عرض کردم، برای روشی که گفته شد پابرجاست؛ اما حق با شماست؛ حواسم نبود؛ این ها نتیجه خوندن یک کتاب قطور در یک روزه :لبخند:
البته یک روش دیگه برای اینکار میتونه استفاده از Embedded Command Console باشه؛ و نتیجه مستقیما در برنامه نمایش پیدا کنه؛
و همچنین اگه قرار هست از روشی که ذکر شد، استفاده بشه؛ شاید بهتر باشه به نحوی کار بشه که یک نوع Flexibility در کد در نظر گرفته بشه؛ به این صورت که اگر ارتباط با هاستی برقرار نشد، یک هاست دیگه رو با مکانیزم دیگه ای، سورس صفحه خونده بشه و نتیجه به کاربر اعلام بشه؛ یا حتی یک اسکریپت ساده PHP (برای تشخیص آی پی) نوشته بشه و در هاست شخصی مطمئن (در صورت وجود) آپلود بشه و نتیجه از اون فایل خونده بشه و به کاربر نمایش داده بشه....

mehran901
دوشنبه 16 بهمن 1391, 20:45 عصر
خب ی کارسادش وینساکه ! درضمن آیپی آدرسی که شما میخوای رو میده
Winsock.LocalIP
تست کن

آیپی آدرس ISP میده نه Local Ip Address!!!!

m2011kh
دوشنبه 16 بهمن 1391, 22:14 عصر
من امتحان کرم IP Localv رو داد نه ایپی که ISP میده.

mehran901
دوشنبه 16 بهمن 1391, 22:27 عصر
اونوقت اینجا چرا فرق داره؟! جالب شد .... کی میدونه موضوع چیه ؟

niksalehi
سه شنبه 17 بهمن 1391, 00:36 صبح
بله، وینساک local ip میده

mehran901
سه شنبه 17 بهمن 1391, 01:59 صبح
خب از اسم این پروسیجرش هم معلومه ولی مگه میشه رو پی سی من آیپی ISP میده درصورتی که آیپی local کاملا متفاوته! چ جالب شد خب خوب شد گفتین قرار بود یجا استفاده کنم ، موضوع چیه... کسی میدونه

shahram_g
سه شنبه 17 بهمن 1391, 09: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, 15:45 عصر
خب از اسم این پروسیجرش هم معلومه ولی مگه میشه رو پی سی من آیپی ISP میده درصورتی که آیپی local کاملا متفاوته! چ جالب شد خب خوب شد گفتین قرار بود یجا استفاده کنم ، موضوع چیه... کسی میدونه

سلام
داشتم يه دوري ميزدم پست شما رو ديدم

فرقش تو نحوه كانفيگ مودم هست
يعني چي ؟

اگه برين اي پي كانكشنتون رو ببينين .Local دقيقا همون ايپي رو ميده

منظور از كانفيگ مودم هم Bridging و PPPOE هست


موفق باشيد

javaweb341
چهارشنبه 29 خرداد 1392, 19: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
خوب این نظر من بود:چشمک: