Lấy địa chỉ IP trong lập trình bằng một số ngôn ngữ thông dụng

Published by Việt Coding on

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.

Lấy địa chỉ IP

Lấy địa chỉ IP rất có ích trong phát triển ứng dụng (thường là Web)

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 – https://vietcoding.com)

Quảng cáo tài trợ


Việt Coding

Là một người đam mê lập trình, tôi vọc vạch đủ thứ liên quan đến lập trình cho thoả chí tò mò. Hiện làm chủ yếu ở mảng phát triển ứng dụng di động cho iOS và Android với React Native. Thỉnh thoảng vọc vạch mấy thứ liên quan đến Internet of Things như Smart Home. Đang nghịch mấy con Raspberry Pi và thấy nó cũng thú vị :)

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

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

string HostName = GetHostName()
        For int i = 0 To GetHostByName(HostName).AddressList.Length - 1
            string a = GetHostByName(HostName).AddressList(i).ToString()
            ListBox1.Items.Add(a)
        Next
        ListBox1.SelectedIndex = 0
        txt_3.Text = HostName

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        txt_2.Text = ListBox1.SelectedItem
    End Sub

Đ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:

    
    < %
    out.print( request.getRemoteAddr() );
    out.print( request.getRemoteHost() );
    %>
    
    //or...
    < %
    out.print( request.getHeader("x-forwarded-for") );
    %>
    

    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

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

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax