--------------------------------------------------------------------------------------------------------------------------------------------------------------
#include
#include
#include
#include in.h>
#include <string.h>
#include if.h>
#include
int main()
{ int i=0;
int sockfd;
struct ifconf ifconf;
unsigned char buf[512];
struct ifreq *ifreq;
//初始化ifconf
ifconf.ifc_len = 512;
ifconf.ifc_buf = buf;
if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)
{ perror("socket"); exit(1);
}
ioctl(sockfd, SIOCGIFCONF, &ifconf); //擷取所有介面資訊
//接下來一個一個的擷取IP地址
ifreq = (struct ifreq*)buf;
for(i=(ifconf.ifc_len/sizeof(struct ifreq)); i>0; i--)
{ // if(ifreq->ifr_flags == AF_INET){ //for ipv4 printf("name = [%s]\n", ifreq->ifr_name); printf("local addr = [%s]\n", inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));
ifreq++;
// }
}
return 0;
}
此方法僅供參考,也適用於擷取其他資訊。 -------------------------------------------------------------------------------------------------------------------------------------------------------------- 簡述:
建立一個套介面。
#include <winsock.h>
SOCKET PASCAL FAR socket( int af, int type, int protocol);
af:一個地址描述。目前僅支援AF_INET格式,也就是說ARPA Internet地址格式。
type:新套介面的類型描述。
protocol:套介面所用的協議。如調用者不想指定,可用0。
注釋
socket()函數用於根據指定的地址族、資料類型和協議來分配一個套介面的描述字及其所用的資源。如果協議protocol未指定(等於0),則使用預設的串連方式。
對於使用一給定地址族的某一特定套介面,只支援一種協議。但地址族可設為AF_UNSPEC(未指定),這樣的話協議參數就要指定了。協議號特定於進行通訊的“通訊域”。支援下述類型描述:
類型 解釋
SOCK_STREAM 提供有序的、可靠的、雙向的和基於串連的位元組流,使用帶外資料傳送機制,為Internet地址族使用TCP。
SOCK_DGRAM 支援不需連線的、不可靠的和使用固定大小(通常很小)緩衝區的資料報服務,為Internet地址族使用UDP。
SOCK_STREAM類型的套介面為全雙向的位元組流。對於流類套介面,在接收或發送資料前必需處於已串連狀態。用 connect()調用建立與另一套介面的串連,串連成功後,即可用 send()和recv()傳送資料。當會話結束後,調用closesocket()。帶外資料根據規定用send()和recv()來接收。
實現SOCK_STREAM類型套介面的通訊協議保證資料不會丟失也不會重複。如果終端協議有緩衝區空間,且資料不能在一定時間成功發送,則認為串連中斷,其後續的調用也將以WSAETIMEOUT錯誤返回。
SOCK_DGRAM類型套介面允許使用 sendto()和recvfrom()從任意連接埠發送或接收資料報。如果這樣一個套介面用connect()與一個指定連接埠串連,則可用send()和recv()與該連接埠進行資料報的發送與接收。
傳回值
若無錯誤發生,socket()返回引用新套介面的描述字。否則的話,返回INVAID_SOCKET錯誤,應用程式可通過WSAGetLastError()擷取相應錯誤碼。
錯誤碼:
WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。
WSAENETDOWN:WINDOWS套介面實現檢測到網路子系統失效。
WSAEAFNOSUPPORT:不支援指定的地址族。
WSAEINPROGRESS:一個阻塞的WINDOWS套介面調用正在運行中。
WSAEMFILE:無可用檔案描述字。
WSAENOBUFS:無可用緩衝區,無法建立套介面。
WSAEPROTONOSUPPORT:不支援指定的協議。
WSAEPROTOTYPE:指定的協議不適用於本套介面。
WSAESOCKTNOSUPPORT:本地址族中不支援該類型套介面。
參見
accept(), bind(), connect(), getsockname(), getsockopt(), setsockopt(), listen(), recv(), recvfrom(), select(), send(), sendto(), shutdown(), ioctlsocket().4.2 資料庫常式
socket()
函數原型:
SOCKET WSAAPI socket(
int af,
int type,
int protocol
);
該函數及參數定義包含在winsock2.h標頭檔中,在MSDN中查不到具體參數。
參數選項及定義:
地址族af:(常用AF_INET實現TCP/UDP協議)
#define AF_UNSPEC 0 /* unspecified */
#define AF_UNIX 1 /* local to host (pipes, portals) */
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
#define AF_IMPLINK 3 /* arpanet imp addresses */
#define AF_PUP 4 /* pup protocols: e.g. BSP */
#define AF_CHAOS 5 /* mit CHAOS protocols */
#define AF_NS 6 /* XEROX NS protocols */
#define AF_IPX AF_NS /* IPX protocols: IPX, SPX, etc. */
#define AF_ISO 7 /* ISO protocols */
#define AF_OSI AF_ISO /* OSI is ISO */
#define AF_ECMA 8 /* european computer manufacturers */
#define AF_DATAKIT 9 /* datakit protocols */
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
#define AF_SNA 11 /* IBM SNA */
#define AF_DECnet 12 /* DECnet */
#define AF_DLI 13 /* Direct data link interface */ #define AF_LAT 14 /* LAT */
#define AF_HYLINK 15 /* NSC Hyperchannel */
#define AF_APPLETALK 16 /* AppleTalk */
#define AF_NETBIOS 17 /* NetBios-style addresses */
#define AF_VOICEVIEW 18 /* VoiceView */
#define AF_FIREFOX 19 /* Protocols from Firefox */
#define AF_UNKNOWN1 20 /* Somebody is using this! */
#define AF_BAN 21 /* Banyan */
#define AF_ATM 22 /* Native ATM Services */
#define AF_INET6 23 /* Internetwork Version 6 */
#define AF_CLUSTER 24 /* Microsoft Wolfpack */
#define AF_12844 25 /* IEEE 1284.4 WG AF */
通訊端類型type:
#define SOCK_STREAM 1 /* stream socket */
#define SOCK_DGRAM 2 /* datagram socket */
#define SOCK_RAW 3 /* raw-protocol interface */
#define SOCK_RDM 4 /* reliably-delivered message */
#define SOCK_SEQPACKET 5 /* sequenced packet stream */
協議類型protocol:
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_IGMP 2 /* internet group management protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */