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.

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

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 != 0; ++i) {
        struct in_addr addr;
        memcpy(&addr, phe->h_addr_list, 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 icon smile Lấy địa chỉ IP trong lập trình bằng một số ngôn ngữ thông dụng Chúc vui !

(Copyright © 2010 by Hoàng  Tuấn  Anh -Shinichi @ Shinichi Blog – http://vietcoding.com)



Tuấn Anh

Là một người đam mê lập trình, hiện tập trung mảng phát triển ứng dụng web dựa trên nền tảng của WordPress. Đồng thời, nhằm đạt sự trọn vẹn trong công việc freelance, tôi đang học đồ hoạ, để có thể tự mình thiết kế layout, logo và những thứ khác liên quan đến đồ họa. Mục tiêu vài năm tới: Tôi sẽ là Full Web Developer = Graphics Design + Coding. Vietcoding Blog viết về WordPress, chia sẻ kinh nghiệm, mẹo vặt, viết plugin, làm theme và ôm ấp ý tưởng viết một Web Application Framework dựa trên WordPress. Đồ hoạ là chuyên mục đang được chuẩn bị trong tương lai.

Comments

  1. phuong says:

    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

  2. phuong says:

    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

    • 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,

  3. phuong says:

    đ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!

  4. phuong says:

    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!

  5. Hì hì,

    Chúc mừng bạn :D 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 =-.

  6. phuong says:
    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 đó

  7. huong says:

    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é

    • 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 :)

  8. huong says:

    thanks ban nhieu nha

  9. van says:

    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

    • 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 đó :)

  10. van says:

    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

    • 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.

  11. Truong says:

    $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 ? …

  12. Truong says:

    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 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 ?

Speak Your Mind

*