linux获取本机IP地址问题(live555)

  • Post author:
  • Post category:linux


1.问题 :今天在一台服务器上安装live555,运行结果如下:

出现ip地址为:0.0.0.0
2.最后问题所在:
以后要注意一点就是:别从别人身上找问题,应该从自己身上找问题!不扯了。最后发现是在防火墙配置里面有问题,发现:

信任的设备中居然没有eth0。于是选择上即可,同时加上端口554.运行木有问题!

3.linux获取本机IP地址的方法

转发与:

http://jeremiah.blog.51cto.com/539865/275791



live555MediaServer读取本地IP的主要方法是:发送一个TTL=0的组播包,接收这个包,然后解析发送地址,即为本机地址。

这种方法只能获得本机的最主要的IP地址(eth0)。不能获取所有的IP地址。

抠取代码如下,操作平台为RedHat Linux ES5,gcc 4.1.2。

 
 
 
  1. /*******************************************************************************  
  2.  * Filename:        get_ip.c  
  3.  * Created on:      Feb 8, 2010  
  4.  * Author:          Jeremiah  
  5.  * Description:     获取本机IP地址  
  6.  *  
  7.  ******************************************************************************/ 
  8.  
  9. #include <stdio.h>  
  10. #include <stdint.h>  
  11. #include <stdlib.h>  
  12. #include <unistd.h>  
  13. #include <sys/socket.h>  
  14. #include <netinet/in.h>  
  15. #include <arpa/inet.h>  
  16. #include <string.h>  
  17. #include <sys/time.h>  
  18. #include <sys/select.h>  
  19.  
  20. in_addr_t ourIPAddress();  
  21. int setupDatagramSocket(uint16_t);  
  22. uint8_t socketJoinGroup(int socket, uint32_t groupAddress);  
  23. uint8_t writeSocket(int socket, struct in_addr address, uint32_t port,  
  24.         uint8_t ttlArg, unsigned char *buffer, unsigned bufferSize);  
  25. int readSocket(int socket, unsigned char *buffer, unsigned bufferSize,  
  26.         struct sockaddr_in *fromAddress, struct timeval *timeout);  
  27. int blockUntilReadable(int socket, struct timeval* timeout);  
  28. uint8_t badAddress(uint32_t addr);  
  29. uint8_t socketLeaveGroup(int socket, uint32_t groupAddress);  
  30. uint8_t IsMulticastAddress(uint32_t address);  
  31.  
  32. #define SET_SOCKADDR_SIN_LEN(var)  
  33. #define MAKE_SOCKADDR_IN(var,adr,prt) /*adr,prt must be in network order*/\  
  34.     struct sockaddr_in var;\  
  35.     var.sin_family = AF_INET;\  
  36.     var.sin_addr.s_addr = (adr);\  
  37.     var.sin_port = (prt);\  
  38.     SET_SOCKADDR_SIN_LEN(var);  
  39.  
  40. int main(int argc, char **argv) {  
  41.     struct sockaddr_in ourAddress;  
  42.     ourAddress.sin_addr.s_addr = ourIPAddress();  
  43.  
  44.     if (ourAddress.sin_addr.s_addr == 0) {  
  45.         printf("get local ip error!\n");  
  46.         return 1;  
  47.     }  
  48.  
  49.     printf("%s\n", inet_ntoa(ourAddress.sin_addr));  
  50.  
  51.     return 0;  
  52. }  
  53.  



版权声明:本文为onelight1997原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。