目的可能是为了获取rtmp真正的推流ip

如果rtmp推流地址是域名,往CDN推流的话,需要nslookup  的那种DNS解析,然后获取的几个ip

可以使用netstat -n 等命令查看 1935端口的真正ip是多少,废话不多说,下面是代码:

--------------------

 代码中可能只需要关心 EnumTCPTable()  然后判断 if (htons((u_short)pTcpTable->table[i].dwRemotePort) == 1935)
获取该端口的ip

-------------------------------------------------------------------------------------------------------------------------

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <Iphlpapi.h>
#include <malloc.h>
#include <Winsock2.h>
#include <stdlib.h>
#include <tchar.h> #pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib") static char TcpState[][] =
{
"???",
"CLOSED",
"LISTENING",
"SYN_SENT",
"SEN_RECEIVED",
"ESTABLISHED",
"FIN_WAIT",
"FIN_WAIT2",
"CLOSE_WAIT",
"CLOSING",
"LAST_ACK",
"TIME_WAIT"
}; DWORD EnumTCPTable()
{
PMIB_TCPTABLE pTcpTable = NULL;
DWORD dwSize = ;
DWORD dwRetVal = ERROR_SUCCESS; struct in_addr rip;
struct in_addr lip;
char szrip[] = {};
char szlip[] = {}; //获得pTcpTable所需要的真实长度,dwSize
if (GetTcpTable(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER)
{
pTcpTable = (MIB_TCPTABLE*) malloc ((UINT) dwSize);
}
else
return dwRetVal; printf("Active Connections\n\n");
printf(" Proto\t%-24s%-24s%s\n","Local Address","Foreign Address","State"); if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) == NO_ERROR)
{
for (int i = ; i < (int) pTcpTable->dwNumEntries; i++)
{
rip.S_un.S_addr = pTcpTable->table[i].dwRemoteAddr;
lip.S_un.S_addr = pTcpTable->table[i].dwLocalAddr;
//监听端口,远程主机端口为0,但函数返回是有值的,不知道它是怎么考虑的
if (pTcpTable->table[i].dwState == MIB_TCP_STATE_LISTEN)
pTcpTable->table[i].dwRemotePort = ; //dwLocalPort,dwRemotePort 是网络字节
_snprintf(szlip,sizeof(szlip),"%s:%d",inet_ntoa(lip),htons((u_short)pTcpTable->table[i].dwLocalPort));
_snprintf(szrip,sizeof(szrip),"%s:%d",inet_ntoa(rip),htons((u_short)pTcpTable->table[i].dwRemotePort));
printf(" TCP\t%-24s%-24s%s\n",szlip,szrip,TcpState[pTcpTable->table[i].dwState]);
}
}
else
{
printf("\tCall to GetTcpTable failed.\n"); LPVOID lpMsgBuf; if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwRetVal,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
,
NULL ))
{
printf("\tError: %s", lpMsgBuf);
}
LocalFree( lpMsgBuf );
}
GlobalFree(pTcpTable);
return dwRetVal;
} DWORD EnumUDPTable()
{
PMIB_UDPTABLE pUdpTable = NULL;
DWORD dwSize = ;
DWORD dwRetVal = ERROR_SUCCESS; // struct in_addr rip;
struct in_addr lip;
// char szrip[32] = {0};
char szlip[] = {}; //获得pUdpTable所需要的真实长度,dwSize
if (GetUdpTable(pUdpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER)
{
pUdpTable = (MIB_UDPTABLE*) malloc ((UINT) dwSize);
}
else
return dwRetVal; printf("Active Connections\n\n");
printf(" Proto\t%-24s%-24s\n","Local Addr","Local Port"); if ((dwRetVal = GetUdpTable(pUdpTable, &dwSize, TRUE)) == NO_ERROR)
{
for (int i = ; i < (int) pUdpTable->dwNumEntries; i++)
{
// rip.S_un.S_addr = pUdpTable->table[i].dwRemoteAddr;
lip.S_un.S_addr = pUdpTable->table[i].dwLocalAddr;
//监听端口,远程主机端口为0,但函数返回是有值的,不知道它是怎么考虑的
// if (pUdpTable->table[i].dwState == MIB_Udp_STATE_LISTEN)
// pUdpTable->table[i].dwRemotePort = 0; //dwLocalPort,dwRemotePort 是网络字节
_snprintf(szlip,sizeof(szlip),"%s:%d",inet_ntoa(lip),htons((u_short)pUdpTable->table[i].dwLocalPort));
// _snprintf(szrip,sizeof(szrip),"%s:%d",inet_ntoa(rip),htons((u_short)pTcpTable->table[i].dwRemotePort));
// printf(" TCP\t%-24s%-24s%s\n",szlip,szrip,TcpState[pTcpTable->table[i].dwState]);
printf(" UDP\t%-24s\n",szlip);
}
}
else
{
printf("\tCall to GetUdpTable failed.\n"); LPVOID lpMsgBuf; if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwRetVal,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
,
NULL ))
{
printf("\tError: %s", lpMsgBuf);
}
LocalFree( lpMsgBuf );
}
GlobalFree(pUdpTable);
return dwRetVal;
} DWORD DelTCPConnect(const char *lpszLocalAddr,
const char * lpszRemoteAddr,
DWORD dwLocalPort,
DWORD dwRemotePort)
{
DWORD dwRetVal = ERROR_NOT_FOUND;
MIB_TCPROW srtTcpRow;
srtTcpRow.dwLocalAddr = inet_addr(lpszLocalAddr);
srtTcpRow.dwRemoteAddr = inet_addr(lpszRemoteAddr);
srtTcpRow.dwLocalPort = htons(dwLocalPort);
srtTcpRow.dwRemotePort = htons(dwRemotePort);
srtTcpRow.dwState = MIB_TCP_STATE_DELETE_TCB; //目前为止,settcpEntry只支持该参数
dwRetVal = SetTcpEntry(&srtTcpRow);
if (dwRetVal != ERROR_SUCCESS)
{
LPVOID lpMsgBuf;
if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwRetVal,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
,
NULL ))
{
printf("\tError: %s", lpMsgBuf);
}
LocalFree( lpMsgBuf );
}
return dwRetVal;
} void main()
{
DWORD TcpInfo = EnumTCPTable();
DWORD UdpInfo = EnumUDPTable();
system("pause");
system("pause");
}

http://blog.csdn.net/syytem004/article/details/43272359

C++ 实现的netstat -an 的功能<转>-目的为获取rtmp推流地址如果是域名的话查看1935的ip的更多相关文章

  1. 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)

    今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...

  2. 浅析微信支付:公众平台卡券功能开通、HTML5线上发券(JS-SDK接口)、查看卡券详情

    本文是[浅析微信支付]系列文章的第十六篇,主要讲解如何使用微信公众平台的卡券功能.如何使用HTML5在网页展示用户领券以及微信卡券和商户平台代金券的关系. 浅析微信支付系列已经更新十六篇了哟-,没有看 ...

  3. Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据

    用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...

  4. Python的功能模块[0] -> wmi -> 获取 Windows 内部信息

    wmi模块 / wmi Module WMI (Windows Management Instrumentation) 模块可用于获取 Windows 内部信息.该模块需要 win32com 的支持, ...

  5. 个人永久性免费-Excel催化剂功能第56波-获取Excel对象属性相关自定义函数

    之前零散开发过一些自定义函数获取Excel对象属性,此次再细细地把有价值的属性都一一给开发完成,某些场景下,有这些小函数还是可以比较方便地实现一些通过Excel界面没法轻松获取到的信息. 修复与更新 ...

  6. day79:luffy:注册之对手机号的验证&实现基本的注册功能逻辑&点击获取验证码&redis

    目录 1.前端和后端对于手机号的验证 2.实现基本的注册功能-不包括验证码 3.点击获取验证码 4.解决登录不上Xadmin的bug 5.redis register.vue页面 <templa ...

  7. 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名 .

    平时根本没时间搞FTP什么的,现在这个项目需要搞FTP,为什么呢,我给大家说下项目背景,我们的一个应用程序上需要上传图片,但是用户部署程序的服务器上不让上传任何东西,给了我们一个FTP账号和密码,让我 ...

  8. 聊一聊Java如何接入招行一网通支付功能

    1.前提条件 相比较于支付宝和微信的支付功能接入这一块,银行相对来说更加严格,比如说支付宝,在你签约之前可以进行一些测试.但是银行来说就不是这样了,如果您现在要进行招行的支付功能开发的话,请务必先让相 ...

  9. 新升级!EasyNVR3.0功能概述--直播与录像

    背景介绍: 对于摄像机直播已经是我们司空见惯的需求,但是,许多用户在现有的直播的基础上更有录像的需求,并且有关于录像的删除定时等录像计划的需求,更有客户不仅需要这些功能,还需要将这些功能集成到自身的业 ...

随机推荐

  1. oracle 与sql serve 获取随机行数的数据

    Oracle 随机获取N条数据    当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这 ...

  2. xml时间配置

    这些星号由左到右按顺序代表 : * * * * * * * 秒 分 时 日 月 周 年 序号 说明 是否必填 允许填写的值 允许的通配符 秒 是 0-59 , - * / 分 是 0-59 , - * ...

  3. MySQL中UNSIGNED和ZEROFILL的介绍

    UNSIGNED: 将数字类型无符号化,这与C和C++这些程序语言的unsigned含义相同. INT的类型范围-2 147 483 648~2 147 483 647 INT UNSIGNED范围0 ...

  4. spring boot 项目文件结构

    启动类建议放在RootPackage的原因: 根据SpringBoot的内置实现,Spring默认从@ComponentScan注解所在的位置开始向后扫描,也就是说,只要我们将组件放在启动类所在的Ro ...

  5. JZ2440 裸机驱动 第7章 内存管理单元MMU

    本章目标:     了解虚拟地址和物理地址的关系:     掌握如何通过设置MMU来控制虚拟地址到物理地址的转化:     了解MMU的内存访问权限机制:     了解TLB.Cache.Write ...

  6. FileStream 和StreamWriter 一起用时

    StreamWriter  Flush 即可. FileStream Flush 无用.

  7. java 装饰设计模式模式

    对已有功能进行增强 示例 已有的类    调用 增强后的类 调用  思考? 为什么要这么做呢? SuperPerson 继承 Person 可以达到同样的效果. 继承的写法,其中MyBuffer... ...

  8. 在Windows下使用svn命令行教程及svn命令行的解释

    本文转载自:https://blog.csdn.net/yangxiao2shi/article/details/50719286/ 以前在公司一直使用git,现在的公司改用svn,一时间还真的不知道 ...

  9. JavaScript if(x),==和===解析(翻译整理)

    一.if()中的布尔判断 if ( Expression ) 表达式会通过ES5定义的ToBoolean方法强制把Expression 转换成布尔值. 数据类型 转换结果 Undefined fals ...

  10. 杂项-Java:jar 包与 war 包介绍与区别

    ylbtech-杂项-Java:jar 包与 war 包介绍与区别 1.返回顶部 1. 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介 ...