局域网内异常DHCP服务器查找

2019-4-27

现象:

公司内部局域网突然上不了网,使用ipconfig查看了下IP,非路由器分配的

故障排查:

1. 启动wireshark,输入过滤条件bootp

2. 接入网线

3. 查看wireshark抓包到的DHCP ACK源MAC地址

4. 查看公司内部谁的电脑MAC地址与之相同,关闭DHCP服务

标签: DHCP

评论(0) 浏览(1869)

海康威视GB28181视频流接收解析显示

2019-3-1

海康威视国标GB28181获取视频流并显示

环境:

MFC,jRtp,ffmpeg,sdl2.0,eXosip,

海康威视摄像头:DS-2CD3T27EDWD-L

思路:

利用eXosip实现sip服务端及客户端,实现GB28181协议交互

利用jRtp接收摄像头rtp视频流

利用ffmpeg解码视频流(由于海康威视ps视频流里面含有一些私有协议会导致花屏,因此这边需要先把ps流解析成H264视频流)

利用sdl显示视频

标签: c++ ffmpeg rtp SDL

评论(0) 浏览(210)

wireshark抓包数据获取rtsp请求的视频流

2019-1-17 C++

lua脚本下载:https://github.com/volvet/h264extractor 

1. 安装wireshark软件

2. 编辑wireshark安装目录底下的init.lua,设置disable_lua = false;

3. 在init.lua的最后加上dofile(DATA_DIR.."rtp_h264_extractor.lua")

4. 把rtp_h264_extractor.lua放在wireshark同一路径下

5. 打开wireshark抓取的网络数据流

6.设置过滤条件分析:如rtsp.method == "PLAY" && ip.src == 1.1.1.1

获取ip地址为1.1.1.1请求的所有rtsp视频流

7.通过tcp端口获取要分析的视频流的所有交互数据:如tcp.port == 57109

获取通过57109该端口交互的rtsp视频流数据

8.导出该视频流数据:文件->导出特定分组 All packets Displayed

9.查看导出的数据视频流编码格式:

查找抓包数据服务端对客户端DESCRIBE请求的回复数据包,找到Media Attribute节点

查看编码是否H264,及type值 如96,如是H264则继续往下

10.设置H264的编码载体类型

编辑->首选项->Protocols->H264设置H264 dynamic payload types为96

11.导出H264数据裸流:工具->Extract h264 stream from RTP

12.在数据流的同一目录底下生成dump.264

13.打开vlc,设置分流器为H264

工具->偏好设置->全部(出来高级偏好设置)->输入/编解码器->分流器->分流模块->H264

14.编号生成的dump.264文件


标签: wireshark H264 rtsp

评论(0) 浏览(560)

CStdioFile Unicode ReadString 读取汉字乱码

2018-10-21 C++

     1. Unicode 模式下ReadString 需要使用typebinary读取文本,中文才不会乱码

        CStdioFile file;

        if (file.Open(filePath, CFile::modeRead | CFile::typeBinary) == TRUE)
        {
            CString strLine(_T(""));
            WORD sign;
            file.Read(&sign, 2);
            while (file.ReadString(strLine))
            {
                 m_listInfo.InsertString(m_listInfo.GetCount(), strLine);
            }
            file.Close();
        }

标签: MFC StdioFile ReadString

评论(0) 浏览(1354)

MFC CEdit背景透明,文字透明实现

2018-6-17

需求:不规则输入框实现

实现:

1. 响应对话框的WM_CTLCOLOR消息

获取EDIT对应的窗口背景色,设置画刷为NULL

if (nCtlColor == CTLCOLOR_EDIT)

 {
        pDC->SetTextColor(RGB(255, 255, 255));
        pDC->SetBkMode(TRANSPARENT);
        CDC* dc = GetDC();
        CRect rc;
        pWnd->GetWindowRect(rc);
        ScreenToClient(rc);

        pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY);
        return (HBRUSH)::GetStockObject(NULL_BRUSH);

}
2. 响应EN_CHANGE消息

获取控件所在的位置,通知窗口进行刷新

     CRect rc;
    GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowRect(&rc);
    ScreenToClient(&rc);
    InvalidateRect(&rc, TRUE);
    

标签: MFC CEdit 背景透明

评论(0) 浏览(1782)

Parasoft c++test 9.6安装使用导引交叉编译

2018-5-12

Parasoft c++test 9.6安装使用导引

参考:https://blog.csdn.net/flyoxs/article/details/53524044

参考: https://docs.parasoft.com/display/CPPDESKE1033

安装

直接照文档一步步安装,略过

通用过程

1. 创建C++ Test测试项目

    1.VS项目

    2.linux MakeFile项目

        使用cpptestscan工具生成BDF文件

2.运行分析

3.复查结果


生成BDF文件

    修改Makefile ,在CC/CXX前添加cpptestscan完成路径

自定义编译器

针对嵌入式代码,找不到合适的编译器,需要自己创建创建编译器

步骤:

https://docs.parasoft.com/display/CPPDESKE1033/Configuring+Testing+with+the+Cross+Compiler

注:不知道交叉编译的GCC版本的话选择最新的GCC 如(4.9.x),

如选择的GCC版本低于交叉编译器的GCC版本,可能会实际编译通过但是CPPC++Test编译报错!


修改项目编译器

BugDetective

可能出现错误结果

1. __atomic_fetch_add" is undefined

自定义编译器对应的gcc版本太低

2. 类成员变量申明时直接初始化报错

自定义编译器对应的gcc版本太低


标签: Parasoft 交叉编译 arm

评论(0) 浏览(1481)

利用dll生成lib

2018-4-29 C++

业务场景:

使用libvlc3.02 SDK提供的lib及dll编译运行程序,提示找不到XXX于动态链接库libvlc.dll上

解决办法:

直接利用libvlc.dll生成libvlc.lib

步骤:

dumpbin.exe:dll导出函数

C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin>dumpbin libvlc.dll /EXPORTS /OUT:libvlc.def

编辑libvlc.def只留下函数所在的行

          1    0 00002B30 libvlc_add_intf
          2    1 0000BB60 libvlc_audio_equalizer_get_amp_at_index
          3    2 0000B980 libvlc_audio_equalizer_get_band_count

python:格式化def

file = open(r"D:\Beihai\python\libvlco.def")
files = open(r"D:\Beihai\python\libvlc.def", "w")
fc = 1
while 1 :
    line = file.readline()
    if not line :
        break
    sl = line.split()
    #print sl[-1]
    nl = sl[-1] + " @ " + str(fc) + "\n"
    fc = fc + 1
    files.write(nl)
file.close()
files.close()

lib:利用def生成lib

lib /def:libvlc.def /MACHINE:IX86 /out:libvlc.lib



标签: python c++ def dll

评论(0) 浏览(956)

百度地图坐标与GPS坐标的转换

2018-3-25 C++

参考各种坐标的转换:https://blog.csdn.net/doulejian/article/details/70155080

GPS坐标在百度地图上显示位置:http://developer.baidu.com/map/jsdemo.htm#a5_2

获取百度地图坐标点:http://api.map.baidu.com/lbsapi/getpoint/index.html

#pragma once

static const double PI = 3.1415926535897932384626;
static const double A = 6378245.0;
static const double EE = 0.00669342162296594323;
class Gps
{
public:
Gps(void){}
~Gps(void){}
Gps(double wgLat, double wgLon)
{
SetWgLat(wgLat);
SetWgLon(wgLon);
}

double GetWgLat()
{
return m_wgLat;
}

void SetWgLat(double wgLat)
{
m_wgLat = wgLat;
}

double GetWgLon()
{
return m_wgLon;
}

void SetWgLon(double wgLon)
{
m_wgLon = wgLon;
}

Gps Transform(double lat, double lon)
{
if (TRUE == OutOfChina(lat, lon))
{
return Gps(lat, lon);
}

double dLat = TransformLat(lon - 105.0, lat - 35.0);
double dLon = TransformLon(lon - 105.0, lat - 35.0);
double radLat = lat / 180.0 * PI;
double magic = sin(radLat);
magic = 1 - EE * magic * magic;
double sqrtMagic = sqrt(magic);
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI);
dLon = (dLon * 180.0) / (A / sqrtMagic * cos(radLat) * PI);
double mgLat = lat + dLat;
double mgLon = lon + dLon;
return Gps(mgLat, mgLon);
}

double TransformLat(double x, double y)
{
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y
+ 0.2 * sqrt(abs(x));
ret += (20.0 * sin(6.0 * x * PI) + 20.0 * sin(2.0 * x * PI)) * 2.0 / 3.0;
ret += (20.0 * sin(y * PI) + 40.0 * sin(y / 3.0 * PI)) * 2.0 / 3.0;
ret += (160.0 * sin(y / 12.0 * PI) + 320 * sin(y * PI / 30.0)) * 2.0 / 3.0;
return ret;
}

double TransformLon(double x, double y)
{
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y
+ 0.1 * sqrt(abs(x));
ret += (20.0 * sin(6.0 * x * PI) + 20.0 * sin(2.0 * x * PI)) * 2.0 / 3.0;
ret += (20.0 * sin(x * PI) + 40.0 * sin(x / 3.0 * PI)) * 2.0 / 3.0;
ret += (150.0 * sin(x / 12.0 * PI) + 300.0 * sin(x / 30.0 * PI)) 
* 2.0 / 3.0;
return ret;
}

BOOL OutOfChina(double lat, double lon) 
{
if (lon < 72.004 || lon > 137.8347)
{
return TRUE;
}
if (lat < 0.8293 || lat > 55.8271)
{
return TRUE;
}
return FALSE;
}

Gps Bd09ToGcj02(double bdLat, double bdLon)
{
double x = bdLon - 0.0065;
double y = bdLat - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * PI);
double theta = atan2(y, x) - 0.000003 * cos(x * PI);
double ggLon = z * cos(theta);
double ggLat = z * sin(theta);
return Gps(ggLat, ggLon);

}

Gps Gcj02ToGps84(double bdLat, double bdLon)
{
Gps gps = Transform(bdLat, bdLon);
double lon = bdLon * 2 - gps.GetWgLon();
double lat = bdLat * 2 - gps.GetWgLat();
return Gps(lat, lon);
}

Gps Bd09ToGps84()
{
Gps gcj02 = Bd09ToGcj02(m_wgLat, m_wgLon);
Gps map84 = Gcj02ToGps84(gcj02.GetWgLat(), gcj02.GetWgLon());
return map84;
}

private:
double m_wgLat;
double m_wgLon;
};


标签: 百度坐标 GPS

评论(0) 浏览(1336)

windows程序崩溃时产生dmp

2017-12-30 C++

需求:windows程序崩溃时产生dmp

解决方案:

stdafx.h增加如下内容:

#include <Dbghelp.h>

//异常dmp捕获
void SetMyUnhandledExceptionFilter();

stdafx.cpp增加如下内容:

//生产DUMP文件
int GenerateMiniDump(HANDLE hFile, PEXCEPTION_POINTERS pExceptionPointers, PTCHAR pwAppName)
{
BOOL bOwnDumpFile = FALSE;
HANDLE hDumpFile = hFile;
MINIDUMP_EXCEPTION_INFORMATION ExpParam;

typedef BOOL(WINAPI * MiniDumpWriteDumpT)(
HANDLE,
DWORD,
HANDLE,
MINIDUMP_TYPE,
PMINIDUMP_EXCEPTION_INFORMATION,
PMINIDUMP_USER_STREAM_INFORMATION,
PMINIDUMP_CALLBACK_INFORMATION
);

MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL;
HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll"));
if(NULL == hDbgHelp)
{
return EXCEPTION_EXECUTE_HANDLER;
}

pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
if(NULL == pfnMiniDumpWriteDump)
{
return EXCEPTION_EXECUTE_HANDLER;
}

if(hDumpFile == NULL || hDumpFile == INVALID_HANDLE_VALUE)
{
TCHAR szFileName[MAX_PATH] = { 0 };
TCHAR* szVersion = _T("v1.0");
int dwBufferSize = MAX_PATH;
SYSTEMTIME stLocalTime = { 0 };

GetLocalTime(&stLocalTime);

//wsprintf(szFileName, L"%s%s", szPath, szAppName);
//CreateDirectory(szFileName, NULL);
_stprintf_s(szFileName, MAX_PATH, _T("%s-%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp"),
pAppName,
szVersion,
stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,
GetCurrentProcessId(), GetCurrentThreadId());
hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
}

if(hDumpFile != INVALID_HANDLE_VALUE)
{
ExpParam.ThreadId = GetCurrentThreadId();
ExpParam.ExceptionPointers = pExceptionPointers;
ExpParam.ClientPointers = FALSE;

pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &ExpParam : NULL), NULL, NULL);

CloseHandle(hDumpFile);
}

if(hDbgHelp != NULL)
{
FreeLibrary(hDbgHelp);
}
return EXCEPTION_EXECUTE_HANDLER;
}

LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
{
if (IsDebuggerPresent())
{
return EXCEPTION_CONTINUE_SEARCH;
}

return GenerateMiniDump(NULL, lpExceptionInfo, _T("XXXXX"));
}



void DisableSetUnhandledExceptionFilter()
{
 void *addr = (void*)GetProcAddress(LoadLibrary(_T("kernel32.dll")) ,"SetUnhandledExceptionFilter");
if(addr)
{
unsigned char code[16] = { 0 };
int size = 0;
code[size++] = 0x33;
code[size++] = 0xC0;
code[size++] = 0xC2;
code[size++] = 0x04;
code[size++] = 0x00;

DWORD dwOldFlag,dwTempFlag;
VirtualProtect(addr, size, PAGE_READWRITE, &dwOldFlag);
WriteProcessMemory(GetCurrentProcess(), addr, code, size, NULL);
VirtualProtect(addr, size, dwOldFlag ,&dwTempFlag);
}
}


void SetMyUnhandledExceptionFilter()
{
SetUnhandledExceptionFilter(NULL);
SetUnhandledExceptionFilter(&ExceptionFilter);
DisableSetUnhandledExceptionFilter();
}

程序入口添加如下内容:

SetMyUnhandledExceptionFilter();

程序所在目录添加:DbgHelp.dll文件



标签: MFC dmp windows

评论(0) 浏览(15845)

git 基本操作记录

2017-12-9 C++

1. 创建空版本库方便上传已有版本库代码

git init --bare

2.项目代码加入git版本控制

git init //初始化git版本库

git add . //把当前项目文件夹内的文件加入版本控制

git commit -m "备注" //提交所有代码到版本库

3. 提交代码到远程版本库

git remote add usb h:\gitres\xxx //usb 远程版本库标识 h:\gitres\xxx 远程版本库位置

git push usb master //提交代码到远程版本库

4. 下载合并远程版本库变动到本体

git fetch usb :tmp //先下载远程版本库到tmp分支

git diff tmp    //刚获取的远程版本库跟本地文件的差异

git merge tmp    //合并远程版本库代码到本地

5. 新建分支切换

git checkout -b newbranch

6. 放弃当前修改

git checkout . //放弃所有的修改

git checkout -- file //放弃文件file的改动

标签: git

评论(0) 浏览(1091)

Powered by EMLOG Copyright @ 狼酒 版权所有. 闽ICP备14012694号-2