雙網絡卡或多網絡卡情況下獲得所有的IP地址
在編寫基於sock的網路程式時,有時需列舉系統中繫結的所有IP地址,在一般控制元件無法解決些問題的情況下,可使用如下方法一試:
一、基於winsock的方法,例程如下(修改自網上一個名為“GetIP”的程式原始碼):
// GetIP.cpp : Defines the entry point for the console application.
// 修改:大漠 2005.12.26
#include "stdafx.h"
#include <stdio.h>
#include <winsock.h>
#include <windows.h>
#include <string.h>
void main()
{
struct hostent *thishost;
struct in_addr in;
char MYName[80];
char *Ptr;
WORD wVersionRequested;
WSADATA wsaData;
int err;
int i,n; //迴圈變數
wVersionRequested=MAKEWORD(2, 0); //設定winsock版本
err = WSAStartup(wVersionRequested, &wsaData); //啟用winsock支援(增加winsock引用計數)
if(err != 0)
{
exit(0);
}
gethostname(MYName, 80); //取得主機名
thishost = gethostbyname(MYName); //取得主機的資訊(IP等)
memset((void *)&in, sizeof(in), 0);
//取得迴圈次數(IP地址數)
n=strlen(*thishost->h_addr_list);
n=n/2;
for(i=0;i<n;i++)
{
in.s_addr = *((unsigned long *)thishost->h_addr_list[i]);
Ptr = inet_ntoa(in);
printf("IP地址%d:%s",i+1,Ptr);
}
WSACleanup(); //解除安裝winsock動態庫(減少引用計數)
}
二、使用“IP助手”
以下為引用自帖子:“VB 用WINSOCK 如何獲取多網絡卡的IP ”http://community.csdn.net/Expert/topic/4167/4167590.xml?temp=.3412592
介面上直接一個text1,記得設定可以換行
Option Explicit
' 偵測目前裝置上所使用的 IP 地址
' 設定在您的計算機上,最多可能使用 5 組 IP 地址,並且用來產生緩衝區
Private Const MAX_IP = 10
Private Type IPINFO
dwAddr As Long ' IP 地址
dwNICIndex As Long ' NIC 介面索引
dwSubnetMask As Long ' 子網掩碼
dwBroadCastAddr As Long ' 封包廣播地址
dwReAssemblySize As Long ' 組譯大小
unused1 As Integer ' 暫不使用
unused2 As Integer ' 暫不使用
End Type
Private Type MIB_IPADDRTABLE
dwEntrys As Long ' 窗體中登入的數量
arIPInfo(MAX_IP) As IPINFO ' IP 地址登入陣列
End Type
Private Type IP_Array
mBuffer As MIB_IPADDRTABLE ' IP 地址清單陣列
BufferLen As Long ' 緩衝區長度
End Type
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long
' 將長整數轉換為字串
Public Function ConvertAddr2Str(LongAddress As Long) As String
Dim addrByte(3) As Byte
Dim Cnt As Long
CopyMemory addrByte(0), LongAddress, 4
For Cnt = 0 To 3
ConvertAddr2Str = ConvertAddr2Str + CStr(addrByte(Cnt)) + "."
Next Cnt
ConvertAddr2Str = Left$(ConvertAddr2Str, Len(ConvertAddr2Str) - 1)
End Function
Private Sub Form_Load()
Text1.Text = ""
Me.Caption = "取得計算機上所使用的 IP 地址"
Text1.Font.Size = 11
Start
End Sub
Private Sub Form_Resize()
Text1.Height = Me.Height - 38 * Screen.TwipsPerPixelY
Text1.Width = Me.Width - 20 * Screen.TwipsPerPixelX
End Sub
Private Sub Start()
Dim lRet As Long, I As Long
Dim Buffer() As Byte
Dim ListDatas As MIB_IPADDRTABLE
Text1 = ""
On Error GoTo Errors
GetIpAddrTable ByVal 0&, lRet, True
If lRet <= 0 Then Exit Sub
ReDim Buffer(0 To lRet - 1) As Byte
' 取回 IP 地址的相關資料
GetIpAddrTable Buffer(0), lRet, False
Debug.Print Buffer(0)
' 利用已經安裝 IP 地址的前四個位元組,來取得登入的資訊
CopyMemory ListDatas.dwEntrys, Buffer(0), 4
Text1 = "在您的計算機上,共有 " & ListDatas.dwEntrys & " 組已經設定使用的 IP 地址" & vbCrLf
Text1 = Text1 & String(45, "=") & vbCrLf
For I = 0 To ListDatas.dwEntrys - 1
' 將存在記憶體之中的地址結構,複製到清單之中
CopyMemory ListDatas.arIPInfo(I), Buffer(4 + (I * Len(ListDatas.arIPInfo(0)))), Len(ListDatas.arIPInfo(I))
Text1 = Text1 & "IP 地址 :" & ConvertAddr2Str(ListDatas.arIPInfo(I).dwAddr) & vbCrLf
Text1 = Text1 & "IP 子網掩碼:" & ConvertAddr2Str(ListDatas.arIPInfo(I).dwSubnetMask) & vbCrLf
Text1 = Text1 & "IP 廣播地址 :" & ConvertAddr2Str(ListDatas.arIPInfo(I).dwBroadCastAddr) & vbCrLf
Text1 = Text1 & String(45, "*") & vbCrLf & vbCrLf
Next
Exit Sub
Errors:
End Sub
注:有關IP助手的使用方法請參見劉巍的文章:“IP Helper API 使用方法詳解”http://www.zdnet.com.cn/developer/code/story/0,2000081534,39046680,00.htm
相關推薦
雙網絡卡或多網絡卡情況下獲得所有的IP地址
在編寫基於sock的網路程式時,有時需列舉系統中繫結的所有IP地址,在一般控制元件無法解決些問題的情況下,可使用如下方法一試:一、基於winsock的方法,例程如下(修改自網上一個名為“GetIP”的程式原始碼):// GetIP.cpp : Defines the entr
python爬蟲和網絡營銷等場景下更換本地IP地址的幾種辦法
log 批量操作 lan 去百度 body 小說 賬號 常用 註冊 想必大家在使用python爬蟲和在網絡營銷中註冊多個賬號等操作時,都遇到過IP限制的問題。這個IP不是小說動漫娛樂電影等IP,而是計算機的IP。道高一尺,魔高一丈。系統再怎麽牛也是程序員哥哥敲出來的。之前牛
oracle 更新欄位,更新非空欄位(null、‘’、一個或多個空格的情況)
UPDATE LOA_FUND_HOLD_DTL SET TRANS_STATUS = '2', AND FAIL_INFO = NVL(TRIM(' ' from rec.FAIL_INFO),'主機對賬失敗。'), A
C/C++ 獲得公網ip地址和內網ip
bool getPublicIp(string& ip) { int sock; char **pptr = NULL; struct sockaddr_in destAddr; struct hostent *ptr = NULL; char
jspsmartupload元件實現單個或多個檔案上傳(下)
///實現新增多個附件 <%@ page language="java" pageEncoding="GBK"%> <html> <head> <title>struts upload by zhangc</titl
基本數據類型在多線程的情況下是否需要加鎖
等於 access mes 程序 大於 bold data 結構 全局 對於多線程訪問同一變量是否需要加鎖的問題,先前大家都討論過。今天用代碼驗證了一下之前的猜想:32位CPU與內存的最小交換數據為4字節/次,這也是結構體要對齊4字節的原因。在物理上,CPU對於同一4字節的
scrapy 提取多層巢狀標籤下的所有文字
怎樣才能一次性提取多層巢狀標籤的所有文字,詳細如下: 假如頁面如下: <p id='test'>hello<b>world!</b></p> 我要的提取結果是:world!(假設world是很多標籤組合的文字)
python3多程序多種使用情況下詳解
序言 最近在寫一個專案,需要使用到多程序。由於整個網路伺服器由自己開發,並沒有使用模組,所以在多程序上面越用越多的疑惑。經過一系列的測試,對整個python多程序有了更多的認識。 最大體會 每當使用multiprocessing建立新的程序,會複製主程序的所有狀態和引數。所以此時
Spring在多執行緒的情況下,如何控制事務起作用
因為執行緒不屬於spring託管,故執行緒不能夠預設使用spring的事務,也不能獲取spring注入的bean在被spring宣告式事務管理的方法內開啟多執行緒,多執行緒內的方法不被事務控制。如下程式碼,執行緒內呼叫insert方法,spring不會把insert方法加入事
Python+Selenium框架設計篇之6-一個類檔案多個測試方法情況下測試韌體的寫法
其實,到前面這一篇文章,簡單的Python+Selenium自動化測試框架就已經算實現了。接下來的主要是介紹,unittest管理指令碼,如何如何載入執行指令碼,再就是採用第三方外掛,實現輸出html的測試報告。本文來介紹下,在同一個類中,多個測試函式時候,測試
java swing多執行緒處理情況下UI假死的解決
背景&問題專案中使用java swing做了個多執行緒處理任務的介面,在介面上顯示多執行緒任務的log資訊,為了實時顯示log資訊,使用了log4j的org.apache.log4j.WriterAppender並單獨開了執行緒。但是log資訊只在多執行緒任務結束後才
三層交換機上多個VLAN的情況下DHCP是如何讓指定VLAN獲得你分配給它的IP的?
這個東西可以實現而且不會出任何問題追究到底是交換機的DHCP 中繼(delay)搞定的客戶機發送的dhcp request資料包到達交換機的時候,因為交換機開啟了DHCP 中繼功能,所以在轉發的時候交換機會對這個request做點小手腳,他把這個客戶機所在vlan的閘道器(
DB2在多表關聯的情況下進行UPDATE的時候真有點BT!
t_sd_saleorderentry表有40多萬記錄,在DB2下看他的執行計劃為140000,且對t_sd_saleorderentry進行了全表掃描浪費了大部分的時間, 本以為DB2可以智慧的把()中的關聯條件轉化出來,在更新表資料的時候,可以智慧地更新相關的資料,但看
OpenStack雙網絡卡、多節點搭建
1、新建三臺虛擬機器(controller、computer、object) 一、基礎環境配置 也可以建立一臺虛擬機器安裝好系統,其它兩臺進行拷貝,需做以下處理 1、修改網路 vim /etc/sysconfig/network-scrips/ifcfg-eth0 2、刪除 rm -rf
socket繫結INADDR_ANY,那會怎樣?(例如:雙通機房多網絡卡多IP設定)
我也回覆一個!! 其中INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。 一般情況下,如果你要建立網路伺服器,則你要通知伺服器作業系統:請在某地址 xxx.xxx.xxx.xxx上的某埠 yyyy上進行偵聽
網絡管理之配置靜態ip和多網卡綁定
線路 restart 完成 -1016 sla pts centos 技術 bond0 不知怎的,這幾天教室的網絡異常詭異,各種不穩定啊。原先小編都是通過自動獲取(dhcp)的方式來進行網絡連接的,現在這種網絡情況下需要(static)的方式來配置一個固定的ip。步驟如下:
多網卡進行綁定,不僅提高了寬帶的速率而且還讓其中一塊網卡出現故障時,不會讓網絡完全中斷
ont 多網卡 依然 支持 alt src 僅主機模式 查看 類型 一、在電腦中添加一塊網卡(我是用虛擬機做實驗所以下面的步驟在虛擬機上操作) 第三步驟點擊"僅主機模式(H)"原因是需要保證兩塊網絡的類型都是相同的 查看兩塊網卡的名稱: 配置網卡的參數 設置
【shell】海思3536 多網絡卡繫結聚合——bond技術
0.原理說明 目前網絡卡繫結mode共有七種(0~6)bond0、bond1、bond2、bond3、bond4、bond5、bond6 常用的有三種: mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。 mode=1:自動備援模式,其中一條線若斷線,其他線路
Eureka的自我保護模式、多網絡卡環境下的IP選擇和健康檢查
Eureka的自我保護模式 禁用自我保護模式: eureka.server.enable-self-preservation = false 多網絡卡環境下的IP選擇 對於多網絡卡的伺服器,各個微服務註冊到Eureka Server上的IP要如何指定呢? 指定IP在某些場合下
spring cloud EurekaClient 多網絡卡 ip 配置 和 原始碼分析
1、前言 對於spring cloud,各個服務例項需要註冊到Eureka註冊中心。 一般會配置ip註冊,即eureka.instance.prefer-ip-address=true。 但是,如果服務例項所在的環境存在多個網絡卡,經常會出現註冊過去的ip不是我們想要的ip。