相关疑难解决方法(0)

获取本地计算机的IP地址

在C++中,获取本地计算机的IP地址和子网掩码的最简单方法是什么?

我希望能够在本地网络中检测本地计算机的IP地址.在我的特定情况下,我有一个子网掩码为255.255.255.0的网络,我的计算机的IP地址是192.168.0.5.我需要以编程方式获取这两个值,以便向我的网络发送广播消息(对于我的特定情况,格式为192.168.0.255)

编辑:许多答案没有给出我预期的结果,因为我有两个不同的网络IP.Torial的代码完成了这个伎俩(它给了我两个IP地址).谢谢.

编辑2:感谢Brian R. Bondy提供有关子网掩码的信息.

c++ sockets networking

48
推荐指数
4
解决办法
18万
查看次数

套接字 - 如何找出我分配的端口和地址

我无法解决这个问题 - 我正在使用本指南使用C语言中的套接字 - http://binarii.com/files/papers/c_sockets.txt

我正在尝试自动获取我的ip和端口使用:

server.sin_port = 0;              /* bind() will choose a random port*/
server.sin_addr.s_addr = INADDR_ANY;  /* puts server's IP automatically */
...
...
bind(int fd, struct sockaddr *my_addr,int addrlen); // Bind function
Run Code Online (Sandbox Code Playgroud)

成功绑定后,如何找出实际分配的IP和端口?

c sockets tcp

38
推荐指数
2
解决办法
10万
查看次数

如何使用套接字地址获取自己的IP地址?

我想获取我的程序启动的计算机的IP地址,然后能够将其发送到客户端,但我总是得到0.0.0.1而不是真正的IP地址(例如127.0.0.1).

我目前能够获得端口,但不能获得IP地址.

我怎么才能得到它?

最好的解决方案是能够获得它sockaddr_in.这是我目前正在做的事情:

int open_connection(char* ip, int* port)
{
  int                   sock;
  struct sockaddr_in    sin;
  socklen_t             len;
  int                   i;

  i = 0;
  len = sizeof(sin);
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    return (-1);
  bzero(&sin, sizeof(struct sockaddr_in));
  sin.sin_family = AF_INET;
  if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) != 0)
    perror("Error on bind");
  if (getsockname(sock, (struct sockaddr *)&sin, &len) != 0)
    perror("Error on getsockname");
  strcpy(ip, inet_ntoa(sin.sin_addr)); // IP = 0.0.0.0
  *port = sin.sin_port;
  return (sock);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我理解我用我的思维方式走错了方向.所以我的问题是:获取自己的IP地址的最佳方法是什么?

c sockets linux networking

7
推荐指数
2
解决办法
2万
查看次数

如何获取本地IP和MAC地址C.

可能重复:
Linux/C++:获取本地计算机的IP地址

我试图获取本地计算机的所有接口的IP和MAC地址,但我不能真正成功.我需要把它放在一起,所以我知道哪个IP属于哪个MAC.

我在google上进行了很多搜索,甚至在这里,但是我找不到真正的C代码.

请你帮助我好吗?

提前致谢!我真的很感激!

c linux mac-address ip-address

5
推荐指数
3
解决办法
3万
查看次数

从getaddrinfo()获取服务器ip 0.0.0.0:0

我正在关注关于NP的Beej指南.

我做了一些修改,并试图通过getaddrinfo()获取我的服务器程序的IP.
(原文可在此处找到http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#simpleserver)

以下是我更改/添加的部分.

if ((rv = getaddrinfo(NULL, "0", &hints, &servinfo)) != 0) { //0 for random port?
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
    return 1;
 }

//... some code emitted ...

//freeaddrinfo(servinfo); //I still need it!


printf("ip: %s\nport: %d\n",
    inet_ntop(AF_INET, &((struct sockaddr_in *)p->ai_addr)->sin_addr, ip4, INET_ADDRSTRLEN),
    ntohs(((struct sockaddr_in *)p->ai_addr)->sin_port)
);
Run Code Online (Sandbox Code Playgroud)

问题是我得到了结果

ip: 0.0.0.0  
port: 0  
Run Code Online (Sandbox Code Playgroud)

Q1:我从几个网站上读到,为端口设置"0"告诉操作系统你想要下一个可用端口,而不是实际为0.这是真的吗?

Q2:我还读过gethostbyname(gethostname(...))可以给你机器的ip,但是Beej说这些被getaddrinfo()取代了.那么,我应该使用getaddrinfo吗?还是gethostbyname?

问题3:还有什么我做错了吗?

c sockets

5
推荐指数
2
解决办法
7827
查看次数

如何在Linux上以C语言获取我的IP地址?

我怎么能得到我的IP地址(最好是192.168.0.1格式)?

c linux networking

5
推荐指数
2
解决办法
4万
查看次数

从接口名称中查找IP地址

在Linux机器上,通用接口名称看起来像eth0,eth1等.我知道如何使用gethostbyname或类似功能找到至少一个IP地址,但我不知道如何指定哪个命名接口我想要IP地址的.我可以使用ifconfig并解析输出,但是为这些信息进行炮轰似乎......不优雅.

有没有办法将所有接口及其IP地址(以及可能的MAC地址)枚举到集合中?或者至少是某些东西gethostbyinterface("eth0")?

linux network-programming

4
推荐指数
1
解决办法
4233
查看次数

获取全球ip地址

我怎样才能(在C++中)我的计算机(Windows XP)的全局IP地址?

c++

4
推荐指数
1
解决办法
3663
查看次数

如何在Unix套接字编程中获取本地IP地址和端口?

我用这个作为地址来创建一个新的服务器(socket(),bind(),listen()):

struct sockaddr_in newServer;
memset(&newServer, 0, sizeof(newServer));
newServer.sin_family = AF_INET;
newServer.sin_addr.s_addr = htonl(INADDR_ANY);
newServer.sin_port = htons(UNUSED_PORT);
Run Code Online (Sandbox Code Playgroud)

宏UNUSED_PORT定义为0.

我期望让服务器监听任何接口和未使用的端口.

我试图用来getsockname()获取我的本地IP地址和端口,但我得到了一些奇怪的输出.输出代码如下:

struct sockaddr_in localAddress;
socklen_t addressLength;
getsockname(newServerfd, (struct sockaddr*)&localAddress,   \
                &addressLength);
printf("local address: %s\n", inet_ntoa( localAddress.sin_addr));
printf("local port: %d\n", (int) ntohs(localAddress.sin_port));
Run Code Online (Sandbox Code Playgroud)

例如,我得到0.255.255.255:0,0.0.0.0:0,255.127.0.0:36237等,我的系统是Mac OS X 10.7.3.

--update--

使用后socklen_t addressLength = sizeof(localAddress);(感谢@cnicutar和@Jonathan Leffler),我总是得到0.0.0.0的本地IP; 那好吗?

c unix sockets ip port

3
推荐指数
1
解决办法
2万
查看次数

如何查找计算机的IP地址?

我正在用C++编写一个使用网络套接字的程序.我需要知道计算机的IP地址是什么,所以我可以将它显示给用户.该程序必须在Windows和Linux上运行.

我听说过计算机可以有多个IP地址.我希望不同计算机上的其他程序可以用来连接到计算机.

这是我已经拥有的相关代码(变量在其他地方声明):

master = new fd_set;
FD_ZERO(master);
struct sockaddr_in my_addr;

listener = socket(PF_INET, SOCK_STREAM, 0);

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero);

bind(listener, (struct sockaddr *)&my_addr, sizeof my_addr);

listen(listener, 10);

FD_SET(listener, master);

fdmax = listener;
Run Code Online (Sandbox Code Playgroud)

c++ sockets ip-address

1
推荐指数
2
解决办法
2597
查看次数

使用C++和Linux获取我的系统的逻辑地址

请建议如何使用C++和Linux获取我的系统的IP地址(逻辑地址).

c++ linux ip-address

0
推荐指数
1
解决办法
999
查看次数

如何区分以太网与其他网络?

在这里的答案中建议,获取机器的IP地址,可以getifaddrs()用来获取程序运行的机器的IP地址,这很有效:D:D

但是,在两个不同的系统上运行相同的程序,一个显示

SERVER_ADDRESS lo 127.0.0.1
SERVER_ADDRESS eth0 129.xxx.xxx.xxx
SERVER_ADDRESS virbr0 192.zzz.zzz.1
Run Code Online (Sandbox Code Playgroud)

而另一个显示

SERVER_ADDRESS lo0 127.0.0.1
SERVER_ADDRESS en0 192.yyy.yyy.yyy
Run Code Online (Sandbox Code Playgroud)

我打算用来strcmp区分以太网,但现在我意识到它不能跨系统工作,因为可能会打印出不同的字符串.

是否有功能(或更好的方法)来检查是否ifa_name是以太网?

c linux networking

0
推荐指数
1
解决办法
2471
查看次数

标签 统计

c ×7

linux ×6

sockets ×6

c++ ×4

networking ×4

ip-address ×3

ip ×1

mac-address ×1

network-programming ×1

port ×1

tcp ×1

unix ×1