目的可能是为了获取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. java面试笔试题收集

    转载过来看看.... J2SE基础 1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 可以 3. equals与==的区别. 4. Object有哪些公用 ...

  2. centos6 ext4修复

    输入root密码后: fsck -y /dev/mapper/vg_logserv-lv_root 修复完后重启 reboot 若忘记了root密码,可用系统ISO盘引导进入Rescue救援模式 在这 ...

  3. PHP 短连接生成算法

    短连接生成类: <?php #短连接生成算法 class Short_Url { #字符表 public static $charset = "0123456789ABCDEFGHIJ ...

  4. bisect维持已排序的序列

    如下: import bisect # 用来处理已排序的序列,用来维持已排序的序列,升序 # 基于二分查找 li = [] bisect.insort(li, 2) bisect.insort(li, ...

  5. redis和memcached选择,对比分析

    memcache和redis是互联网分层架构中,最常用的KV缓存.不少同学在选型的时候会纠结,到底是选择memcache还是redis? memcache提供的功能是redis提供的功能的子集,不用想 ...

  6. android studio 更新 Gradle错误解决方法(Gradle sync failed)

    android studio 更新 Gradle错误解决方法   Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...

  7. BASIC-6_蓝桥杯_杨辉三角形

    示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 , j = ...

  8. 【Spring学习笔记-MVC-1.1--】@PathVariable与@RequestParam、@CookieValue等比较

    作者:ssslinppp       1. 摘要 本文结构如下: 2. @RequestMapping 通配符方式: 3. @PathVariable URL请求时,使用占位符: 4. @Reques ...

  9. 纯文本文件 numbers.txt, 里面的内容(包括方括号)如下所示

    from collections import OrderedDict import xlwt with open('student.txt','r') as f: number_list = jso ...

  10. [UE4]头文件循环依赖C++

    有2个类:aaa和bbb. aaa.h已经#include了bbb.h,则bbb.h就不能#include aaa.h,但bbb.cpp可以#include aaa.h bbb.h已经#include ...