Lấy địa chỉ IP trong lập trình bằng một số ngôn ngữ thông dụng
Xin chào các bạn,
Đối với các lập trình viên ít nhất một lần cũng phải có nhu cầu lấy địa chỉ IP (Internet Protocol) cho việc phát triển ứng dụng. Ví dụ để phục vụ cho việc ghi log truy cập, chống đăng nhập nhiều tài khoản cùng một IP, chặn truy cập thông qua IP,… Thông qua những đoạn mã tổng hợp dưới đây, tôi hy vọng nó sẽ hữu ích trong việc tra cứu của các bạn khi cần. Một số ngôn ngữ như là C#, Delphi, VB.NET, VB, C, Java, ASP.NET, PHP, ASP.
1. C#
using System;
using System.Net;
namespace GetIPCS
{
///
/// Gets IP addresses of the local machine
///
class classGetIPCS
{
///
/// Gets IP addresses of the local machine
///
[STAThread]
static void Main(string[] args)
{
// Get host name
String strHostName = Dns.GetHostName();
Console.WriteLine("Host Name: " + strHostName);
// Find host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);
// Enumerate IP addresses
int nIP = 0;
foreach(IPAddress ipaddress in iphostentry.AddressList)
{
Console.WriteLine("IP #" + ++nIP + ": " +
ipaddress.ToString());
}
}
}
}
2. Delphi
uses Winsock;
function getIPs: Tstrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := TstringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^[I] <> nil do
begin
Result.Add(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetIps.text);
end;
3. VB.NET
Private Sub IPAddress()
'To get local address
Dim LocalHostName As String
Dim i As Integer
LocalHostName = Dns.GetHostName()
Dim ipEnter As IPHostEntry = Dns.GetHostByName(LocalHostName)
Dim IpAdd() As IPAddress = ipEnter.AddressList
For i = 0 To IpAdd.GetUpperBound(0)
Next
End Sub
4. VB
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
5. C
// Borland C++ 5.0: bcc32.cpp getlocalip.cpp
// Visual C++ 5.0: cl getlocalip.cpp wsock32.lib
//
// This sample program is hereby placed in the public domain.
#include
#include
int doit(int, char **)
{
char ac[80];
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
cerr < < "Error " << WSAGetLastError() <<
" when getting local host name." << endl;
return 1;
}
cout << "Host name is " << ac << "." << endl;
struct hostent *phe = gethostbyname(ac);
if (phe == 0) {
cerr << "Yow! Bad host lookup." << endl; return 1; } for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
struct in_addr addr;
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
cout < < "Address " << i << ": " << inet_ntoa(addr) << endl;
}
return 0;
}
int main(int argc, char *argv[])
{
WSAData wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
return 255;
}
int retval = doit(argc, argv);
WSACleanup();
return retval;
}
}
6. Java
import java.net.*;
import java.io.*;
public class GetIPAddress
{
public static void main(String [] args)
{
try
{
InetAddress thisIp =InetAddress.getLocalHost();
System.out.println("IP:"+thisIp.getHostAddress());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
7. ASP.NET
string ip;
ip=Request.ServerVariables("HTTP_X_FORWARDED_FOR");
if(ip==string.Empty)
{
ip=Request.ServerVariables("REMOTE_ADDR");
}
8. PHP
$ip=$_SERVER['REMOTE_ADDR'];
9. ASP
<% Response.Write Request.ServerVariables("REMOTE_ADDR") %>
Thật đơn giản để sử dụng đúng không nào 🙂 Chúc vui !
(Copyright © 2010 by Hoàng Tuấn Anh -Shinichi @ Shinichi Blog – http://vietcoding.com)
23 Comments
phuong · 27/03/2010 at 11:18
Bạn ơi sao lấy ip theo ngôn ngữ VB.NET không chạy được
Dim ipEnter As IPHostEntry = Dns.GetHostByName(LocalHostName)
Dim IpAdd() As IPAddress = ipEnter.AddressList
IPHostEnty và IPAddress nó không có trong danh sách các thuộc tính nên nó cứ báo lõi hoài à.có gì bạn giúp mình với nha!
thank you nhiều
Việt Coding · 27/03/2010 at 17:29
Bạn đã thử thêm namespace System.Net chưa ?
phuong · 28/03/2010 at 21:06
mình thêm rồi mà.Nguyên đoạn code mình viết đó mà nó không xuất ra địa chỉ IP còn username thì được rồi.Bạn xem giúp mình nha! Cẳmn bạn nhiều.
Imports System.Net.Dns
Imports System.Net.IPHostEntry
Imports System.Net.IPAddress
Public Class frm_intt
Private Sub frm_intt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim HostName As String = System.Net.Dns.GetHostName()
txt_1.Text = HostName
Dim i As Integer
Dim IPEnter As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(HostName)
Dim IpAddress() As System.Net.IPAddress = IPEnter.AddressList
For i = 0 To IpAddress.GetUpperBound(0)
txt_2.Text = IpAddress.GetUpperBound(0)
Next
End Sub
End Class
Việt Coding · 31/03/2010 at 13:10
Hi,
Tôi hiện tại đang nghỉ phép về Bắc thăm ông bà. Truy cập qua điện thoại nên có chút bất tiện, sau khi về, tôi sẽ xem kỹ ví dụ của bạn rồi trả lời nhé !
Thân,
phuong · 01/04/2010 at 15:35
đoạn code trên mình sửa lại chạy được rồi bạn.cảm ơn bạn nhiều nha!
phuong · 01/04/2010 at 15:39
mình đang làm bài báo cáo mà gặp rắc rối bạn giúp mình với nhé !
bạn có code lấy địa chỉ ip của bất kì trang web nào bằng ngôn ngữ vb.net
không? có thì cho mình xin nha!
Việt Coding · 01/04/2010 at 17:25
Hì hì,
Chúc mừng bạn 😀 Vấn đề nằm ở đâu vậy bạn ? Chia sẻ cho mọi người cùng biết nào 😉
.-= Việt Coding´s last blog ..5 ví dụ về Rewrite URL dùng htaccess thông dụng =-.
phuong · 05/04/2010 at 08:52
Đoạn code cua minh đó,đoạn code này lấy được địa chỉ ip của web luôn đó
huong · 14/04/2010 at 16:37
Mình muốn lấy địa chỉ ip của các client khi client truy cập đến server của mình bẳng ngôn ngữ jsp! Ban giúp minh nhé
Việt Coding · 15/04/2010 at 21:48
Bạn thử đoạn code này xem sao:
P/s: Tôi không dùng JSP nên cũng không dám chắc lắm 🙂
huong · 19/04/2010 at 08:22
thanks ban nhieu nha
van · 25/04/2010 at 23:18
Chào bạn cho mình hỏi bạn có biết cách tạo ra một web chat không vậy, chỉ giúp mình với. Chat text và chat voice qua web
Việt Coding · 26/04/2010 at 15:34
Tôi chưa tạo webchat bao giờ nên không thể trả lời bạn được. Thay vào đấy bạn search thử tên Google, theo tôi biết có nhiều mã nguồn để làm việc đó 🙂
van · 08/05/2010 at 21:16
Cho mình hỏi vấn đề này chút ngen mình đang làm đề tài chat video giống như yahoo. Mình làm demo bằng VC++ (dùng thư viện lập trình MFC) của bộ DOTNET, khi muốn kết nối đến một máy tính nào đó mình phải hỏi địa chỉ IP của máy đó sau đó mới gõ địa chỉ IP vào một dialog để kết nối đến máy kia, như vậy là rất bất tiện nên mình muốn hỏi bạn làm thế nào để lấy địa chỉ IP của tất cả các client kết nối đến và hiển thị trong một listbox, khi muốn kết nối với client nào thì ta chỉ việc nhìn vào listbox đó và gõ địa chỉ kết nối
Việt Coding · 09/05/2010 at 17:05
Bạn dùng ngôn ngữ C++ ? Nếu vậy thì tôi không giúp được bạn vì tôi không dùng C. Bạn thử tìm kiếm trên Google xem sao.
Truong · 16/06/2011 at 21:27
$ip=$_SERVER[‘REMOTE_ADDR’];
Trên là lấy địa chỉ IP của Server bằng ngôn ngữ PHP
Vậy bạn có thể giải thích cho mình hiểu hơn không ?
REMOTE_ADDR là sao ? …
Việt Coding · 17/06/2011 at 21:09
Câu lệnh trên là lấy IP của client kết nối vào server đó bạn. REMOTE_ADDR = Remote IP Address.
Truong · 16/06/2011 at 21:45
làm sao lấy địa chỉ ip của server (dùng để kết nối cơ sở dữ liệu) bằng PHP ,java vậy bạn
Ai biết chỉ mình nhé
Cảm ơn.
Việt Coding · 17/06/2011 at 21:10
Việt Coding chưa hiểu ý của bạn ? Địa chỉ IP của server để kết nối CSDL là sao ? Hay ý bạn đang muốn nói về IP của MySql server ?
nguyen van toan · 04/04/2014 at 15:13
e có 1 bài tập: tìm country của máy tính đang sử dụng sau đó hiện lên thông báo “bạn đang ở VN” nết ip VN hoặc “bạn không ở VN” neu ip máy tínhlaf quốc gia khác.
e định là tìm ip của máy tính đó sau đó từ ip đó tim ra coutry. e tìm được ip rùi nhưng không bít cách nào de tìm coutry. bác nào bít chỉ giúp e với.
day là code de tim ip của maý tính của e
Imports System.Net
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim getip As String = New WebClient().DownloadString(“http://agentgatech.appspot.com/”)
Label1.Text = getip
End Sub
End Class
Việt Coding · 15/05/2014 at 19:06
Bạn Google thử geo ip
cuong · 11/02/2015 at 10:50
cho mình hỏi làm sao lấy ip public và ip private của sever mình đang dùng (mình đứng tại server đó để lấy ip) bằng PHP
ví dụ máy server mình có
ip public 203.168.167.x
ip pravite10.196.132.x
mình muốn đưng tại server đó lấy ip bằng 1 đoạn code php chứ không dùng bất cứ web nào truy cập từ bên ngoài như http://whatismyipaddress.com/
buiphu · 11/08/2022 at 14:19
Mình cũng làm vậy mà khổ nỗi nó cứ ra 127.0.0.1, ý mình muốn ra 192.168.1.x