社区
硬件/系统
帖子详情
如何获取当前机器上安装的modem及其占用端口
白乔
博客专家认证
2003-04-02 08:25:12
请问如何获取当前机器上安装的modem及其占用端口,以及连接参数?
我做手机串口通讯
只能一个一个连接试着看:(
...全文
91
9
打赏
收藏
如何获取当前机器上安装的modem及其占用端口
请问如何获取当前机器上安装的modem及其占用端口,以及连接参数? 我做手机串口通讯 只能一个一个连接试着看:(
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
seanzh
2003-07-05
打赏
举报
回复
具体的是哪个项下面?
seanzh
2003-07-05
打赏
举报
回复
应该是在HKEY_LOCAL_MACHINE里面吧?
seanzh
2003-07-05
打赏
举报
回复
哦?注册表里面的该如何查?
TAPI里面好象没有得到硬件信息的内容吧?
seanzh
2003-07-04
打赏
举报
回复
关注,我也想知道
theone
2003-07-04
打赏
举报
回复
如果设备已经正常安装,可以从注册表里面查询出硬件信息及端口。你也可以给每个COM口发AT命令查询设备,有正确回复的就是行。参考TAPI。
ksaiy
2003-04-02
打赏
举报
回复
BOOL CRegistryEx::Read (LPCTSTR pszKey, CByteArray& bcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = bcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(bcArray.IsSerializable());
bcArray.RemoveAll();
bcArray.SetSize(10);
bcArray.Serialize(ar);
bcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CDWordArray& dwcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = dwcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
dwcArray.SetSize(10);
dwcArray.Serialize(ar);
dwcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CWordArray& wcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = wcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(wcArray.IsSerializable());
wcArray.RemoveAll();
wcArray.SetSize(10);
wcArray.Serialize(ar);
wcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CStringArray& scArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = scArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(scArray.IsSerializable());
scArray.RemoveAll();
scArray.SetSize(10);
scArray.Serialize(ar);
scArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read(LPCTSTR pszKey, LPRECT& rcRect)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 30;
CDWordArray dwcArray;
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
dwcArray.SetSize(5);
dwcArray.Serialize(ar);
ar.Close();
file.Close();
rcRect->top = dwcArray.GetAt(0);
rcRect->bottom = dwcArray.GetAt(1);
rcRect->left = dwcArray.GetAt(2);
rcRect->right = dwcArray.GetAt(3);
}
m_Info.lMessage = lReturn;
m_Info.dwType = REG_RECT;
m_Info.dwSize = sizeof(RECT);
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
ksaiy
2003-04-02
打赏
举报
回复
BOOL CRegistryEx::Write(LPCTSTR pszKey, LPPOINT& lpPoint)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 20;
CDWordArray dwcArray;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
dwcArray.SetSize(5);
dwcArray.SetAt(0, lpPoint->x);
dwcArray.SetAt(1, lpPoint->y);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(dwcArray.IsSerializable());
dwcArray.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_POINT;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read(LPCTSTR pszKey, int& iVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = sizeof (DWORD);
DWORD dwDest;
LONG lReturn = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, (BYTE *) &dwDest, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
iVal = (int)dwDest;
return TRUE;
}
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, LPSTR lpszBuffer, int nBufferSize )
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = nBufferSize;
char szString[255];
LONG lReturn = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, (BYTE *) szString, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
memcpy( lpszBuffer, szString, (int) dwSize );
nBufferSize = (int) dwSize;
return TRUE;
}
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, DWORD& dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = sizeof (DWORD);
DWORD dwDest;
LONG lReturn = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, (BYTE *) &dwDest, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
dwVal = dwDest;
return TRUE;
}
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CString& sVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = 200;
char szString[255];
LONG lReturn = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
&dwType, (BYTE *) szString, &dwSize);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwSize;
if(lReturn == ERROR_SUCCESS)
{
sVal = szString;
return TRUE;
}
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CStringList& scStringList)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(scStringList.IsSerializable());
scStringList.RemoveAll();
scStringList.Serialize(ar);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
ksaiy
2003-04-02
打赏
举报
回复
给这么多的分啊!
好,给你一个我写软件看看!
http://www.freewebs.com/zf2002/Modem.rar
#include "stdafx.h"
#include "RegistryEx.h"
CRegistryEx::CRegistryEx(HKEY hKeyRoot)
{
m_hKey = hKeyRoot;
}
CRegistryEx::~CRegistryEx()
{
Close();
}
BOOL CRegistryEx::VerifyKey (HKEY hKeyRoot, LPCTSTR pszPath)
{
ASSERT (hKeyRoot);
ASSERT (pszPath);
LONG ReturnValue = RegOpenKeyEx (hKeyRoot, pszPath, 0L,
KEY_ALL_ACCESS, &m_hKey);
if(ReturnValue == ERROR_SUCCESS)
return TRUE;
m_Info.lMessage = ReturnValue;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
return FALSE;
}
BOOL CRegistryEx::VerifyKey (LPCTSTR pszPath)
{
ASSERT (m_hKey);
LONG ReturnValue = RegOpenKeyEx (m_hKey, pszPath, 0L,
KEY_ALL_ACCESS, &m_hKey);
m_Info.lMessage = ReturnValue;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
if(ReturnValue == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::VerifyValue (LPCTSTR pszValue)
{
ASSERT(m_hKey);
LONG lReturn = RegQueryValueEx(m_hKey, pszValue, NULL,
NULL, NULL, NULL);
m_Info.lMessage = lReturn;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::CreateKey (HKEY hKeyRoot, LPCTSTR pszPath)
{
DWORD dw;
LONG ReturnValue = RegCreateKeyEx (hKeyRoot, pszPath, 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL,
&m_hKey, &dw);
m_Info.lMessage = ReturnValue;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
if(ReturnValue == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Open (HKEY hKeyRoot, LPCTSTR pszPath)
{
m_sPath = pszPath;
LONG ReturnValue = RegOpenKeyEx (hKeyRoot, pszPath, 0L,
KEY_ALL_ACCESS, &m_hKey);
m_Info.lMessage = ReturnValue;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
if(ReturnValue == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
void CRegistryEx::Close()
{
if (m_hKey)
{
RegCloseKey (m_hKey);
m_hKey = NULL;
}
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, int iVal)
{
DWORD dwValue;
ASSERT(m_hKey);
ASSERT(pszKey);
dwValue = (DWORD)iVal;
LONG ReturnValue = RegSetValueEx (m_hKey, pszKey, 0L, REG_DWORD,
(CONST BYTE*) &dwValue, sizeof(DWORD));
m_Info.lMessage = ReturnValue;
m_Info.dwSize = sizeof(DWORD);
m_Info.dwType = REG_DWORD;
if(ReturnValue == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, DWORD dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
return RegSetValueEx (m_hKey, pszKey, 0L, REG_DWORD,
(CONST BYTE*) &dwVal, sizeof(DWORD));
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, LPCTSTR pszData)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pszData);
ASSERT(AfxIsValidAddress(pszData, strlen(pszData), FALSE));
LONG ReturnValue = RegSetValueEx (m_hKey, pszKey, 0L, REG_SZ,
(CONST BYTE*) pszData, strlen(pszData) + 1);
m_Info.lMessage = ReturnValue;
m_Info.dwSize = strlen(pszData) + 1;
m_Info.dwType = REG_SZ;
if(ReturnValue == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, CStringList& scStringList)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(scStringList.IsSerializable());
scStringList.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_BINARY;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, CByteArray& bcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(bcArray.IsSerializable());
bcArray.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_BINARY;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, CDWordArray& dwcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(dwcArray.IsSerializable());
dwcArray.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_BINARY;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, CWordArray& wcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(wcArray.IsSerializable());
wcArray.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_BINARY;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write (LPCTSTR pszKey, CStringArray& scArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(scArray.IsSerializable());
scArray.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_BINARY;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Write(LPCTSTR pszKey, LPCRECT rcRect)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 30;
CDWordArray dwcArray;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
dwcArray.SetSize(5);
dwcArray.SetAt(0, rcRect->top);
dwcArray.SetAt(1, rcRect->bottom);
dwcArray.SetAt(2, rcRect->left);
dwcArray.SetAt(3, rcRect->right);
CMemFile file(byData, iMaxChars, 16);
CArchive ar(&file, CArchive::store);
ASSERT(dwcArray.IsSerializable());
dwcArray.Serialize(ar);
ar.Close();
const DWORD dwLen = file.GetLength();
ASSERT(dwLen < iMaxChars);
LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY,
file.Detach(), dwLen);
m_Info.lMessage = lReturn;
m_Info.dwSize = dwLen;
m_Info.dwType = REG_RECT;
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
白乔
2003-04-02
打赏
举报
回复
你这是注册表读写吧?
不是我需要的吧?
流光4.71 for.zip
流光4.71的使用方法,这里有使用说明可以下载自己看一下:http://www.yeshack.com/jc/200508/2345.html 工具这种东西本身就是一把双刃剑,如果因为自己的站点密码太过简单而被攻破然后归罪于因特网上一些免费或共享软件的话,恐怕是有些目光短浅了 。管辖的系统存在漏洞而不自知的话,就算没被人‘干掉',也只是一种暂时的‘虚假安全'。 一、小榕流光使用的简单说明 要谈流光还真找不着感觉——在小榕的帮助文件里已经把软件的使用方法详尽无比地描述过了(强烈建议使用者使用前将帮助文件多读两遍)——我就说三个方面吧——高手完全可以略过的...... 1、 对某FTP主机一次完整的在线安全检测过程 A、选定主机:右键单击FTP主机选项,从弹出菜单中选择添加——将目标的IP地址填入,如"210.142.192.13"...... B、选定用户:右键单击该IP地址,可选添加(将想测试的用户名逐个加入)添加方案(可在方案中编辑希望测试的用户名列表)从列表添加(直接从字典文件中导入)及从SMTP主机导入(导入SMTP主机探测到的用户名),假设你想探测的用户名为quack,便直接在"添加"中填入quack。 C、选择字典: a、简单模式探测:在选项菜单条中对字典及简单模式设置做适当修正以适应本次测试要求,当然你也可以在面板上的单词小写、简单后缀等按钮直接选定。 b、标准模式探测:在"解码字典或方案"中选定某一字典(方案)。 D、调整设置:检查选项菜单栏中的系统设置、连接选项和探测选项,将本次测试的各种选项调整至最优。 E、开始探测:在"探测"菜单中选定"简单模式"或"标准模式",开始此次安全检测。 F、注意事项:由于流光的系统
占用
较高,最好不要再开其它应用程序;在在线检测时可能有时会出现假死机现象,这时你可以通过观察
MODEM
的RD与SD灯来判断程序是否正常运作。 2、密码字典的选用:在线探测相当耗时,所以一个合适的字典会大大降低你的"检测成本",流光里的工具菜单栏对生成适合自己使用的字典档是一个相当实用的工具——我个人觉得尤其值得使用的是"方案编辑工具",它能够在你锁定特定用户检测时发挥较大的作用,具体使用帮助文件中写得非常详细,我就不再多说了 ——当然流光里附带的XKEY也是一个相当不错的字典生成程序。 3、流光其实不仅仅是一个在线安全检测工具——而是一个"工具包",同时具有以下几个辅助功能 A、探测主机
端口
B、探测主机类型 C、FINGER D、扫描POP3、FTP主机 E、验证主机用户 而其主要功能是对POP3、FTP、HTTP、PROXY主机进行在线密码安全检测。所以——一句话,功能强大,试过便知。 至于同样原理的在线密码破解软件国内流行的也并不少,如很早以前的emailcrack、wwwhack、网络刺客1 以及现在流传很广网络刺客2、Webcrack、Xavior等等,流光在很大程度上集成了这些软件的功能,但这些软件早期的产品也都缺乏IP隐藏或类似功能,而近期的Webcrack以及Xavior则都具备从代理服务器端进行探测的功能,我认为这应该是在线探测的一个方向——安全第一嘛——基于此想法,我对流光在探测中会留下的记录进行试验:对一位网管朋友的WINDOWS2000 Beta3 SERVER 英文版进行了一番测试,对其上已知的帐号进行密码强攻, 经探测得知其FTP
端口
是开放的,在未预先通知的情况下对其进行攻击,事后打电话询问其记录情况,在EVENT VIEWER里有如下信息:WARNING:The server was unable to logon the Windows NT account 'houxiourong' due to the following error: Logon failure: unknown user name or bad password.The data is the error code. 而甚至他告诉我,当我的攻击进行到一半时,他的主机上就弹出了The System log file is full.的信息提示框——失败的登陆次数太多以至于其默认为512K的记录文件被撑饱了!所以我要奉劝某些心怀叵测的人们——别做坏事...... 二、密码设置的基本常识及工具 1、有关口令的一些统计 A、数目:在UNIX系统里可以建立多于43,000,000,000,000,000个不同的口令,但如果仅仅组合10种主要 语言的字典,加上这些字的反向、大写、简单后缀等一些微小变形,仅能产生不到5,000,000个字......加 上一些俚语......也不会超出这个数量级。 B、国外某机构在对一个无约束环境的用户口令选择的调查中显示,只有1.4%的用户口令中含有控制符。 2、介绍几个工具 A、CrackLib 简介及应用举例 by JeffreyDong CrackLib 是什么? CrackLib: A ProActive Password Sanity Library By: Alec Muffett Address: alecm@crypto.dircon.co.uk CrackLib是一个可用于类UNIX系统下的函数库, 一般来说, 通常只使用其中的一个函数. :-) 它可以用于编写和passwd有关的程序中, 其基本思想是很简单的, 就是防止用户使 用过于简单, 容易被猜测出来或容易被一些工具搜索到的密码. 密码攻击是网络上最为常见的攻击手段. 随着国内计算机用户水平的提高, 有很多人学 会了使用工具搜索密码的方法, 由于某些原因, 含有被加密密码的文件会被某些用户获 取; 这时, 过于简单的密码就会成为攻击者的突破口. 网上有很多这方面的报道.(我的 一个朋友告诉我他曾用一个星期的时间算出了BTA一个管理员的密码. wow! :-P) 通过限 制用户使用不安全的密码, 可以提高你的系统的安全性. CrackLib的特点 CrackLib并不是一个可以直接运行使用的程序, 它是一个函数库, 你可以利用其中的函 数写自己的程序,或是加入其它程序中, 用来提高安全性. 比如, 你可以重写passwd, 使用户在选择密码时受到限制. CrackLib使用一个字典, 它查找字典以判断所选用密码是否是不安全的密码, 所以你也可 以加入其它信息, 使用自己的字典.比如, 加入公司的名称, 实验室墙上的单词等等潜在 的不安全密码. CrackLib的使用非常简单, 它可以被应用于很多地方, 只需加入简单的几行源码, 就可以 得到非常好的效果. CrackLib的
安装
CrackLib可以很容易的在Internet上找到, 我现在使用的版本是2.7, 跑在我的i586/RedHat Linux和i386/Slackware Linux上. 如果你无法找到它的话, 赶紧去补一补如何在Internet 上查找特定的软件吧, 因为这是一项非常重要的基本功. CrackLib好象没有什么文档, 这也是GNU急需加强的地方. 但是它的
安装
非常简单, 只要按照 README文件 中所叙述的就可以了.如果你用的distribution中包含了这个包, 那它说不定已经
安装
在你的
机器
上了,如RedHat 5.1等. :-) 需要注意的是, 不同版本中一些文件所处的目录位置不同, 你要先确定它们所处的位置. 比 如, 在RedHat 5.1中, 字典是在/usr/lib/中, 文件名为cracklib_dict.*, 而不是README中 所举例的/usr/local/lib/pw_dict.* 应用举例 这里我举一个很简单的例子, 试图用很短的篇幅来说明用法. char *FascistCheck(char *pw, char *dictpath); 这是CrackLib中最常用的函数. pw是用户选择的密码, 你要去验证它是不是不安全的. dictpath是字典所在路径, 注意, 要把文件名中"."之前的部分加上.以RedHat 5.1为例, 假设你已正确的
安装
了CrackLib 2.7和FireBird BBS 2.66M. 让我们来 看看如何把CrackLib加入BBS中去. :-) 首先, 改写bbs_src目录下的register.c: /* ----------- begin ---------- */ char *msg; /* ----------- end ---------- */ ...... while( 1 ) { getdata(0,0,"请设定您的密码 (Setup Password): ",passbuf,PASSLEN,NOECHO,YEA) ; if( strlen( passbuf ) < 4 || !strcmp( passbuf, newuser.userid ) ) { prints("密码太短或与使用者代号相同, 请重新输入\n") ; continue; } /* ----------- begin ---------- */ if (msg = (char*) FascistCheck(passbuf, CRACKLIBPATH)) { printf("请另选密码! (%s)\n",msg); continue; } /* ----------- end ---------- */ strncpy( newuser.passwd, passbuf, PASSLEN ); getdata(0,0,"请再输入一次你的密码 (Reconfirm Password): ",passbuf,PASSLEN,NOECHO,YEA); if( strncmp( passbuf, newuser.passwd, PASSLEN ) != 0 ) { prints("密码输入错误, 请重新输入密码.\n") ; continue; } passbuf[8] = '\0' ; strncpy( newuser.passwd, genpasswd( passbuf ), PASSLEN ); break; } begin和end注释所夹部分为改动处, 下同. 接着改写bbs_src目录下的userinfo.c: /* ----------- begin ---------- */ char *msg; /* ----------- end ---------- */ ...... getdata(i++,0,"请设定新密码: ",buf,PASSLEN,NOECHO,YEA); if( buf[0] == '\0' ) { prints("\n\n密码设定取消, 继续使用旧密码\n"); fail++; break; } strncpy(genbuf,buf,PASSLEN) ; /* ----------- begin ---------- */ if (msg = (char*) FascistCheck(buf, CRACKLIBPATH)) { printf("\n请另选密码! (%s)\n", msg); prints("\n密码设定取消, 继续使用旧密码\n"); fail++; break; } /* ----------- end ---------- */ getdata(i++,0,"请重新输入新密码: ",buf,PASSLEN,NOECHO,YEA); if(strncmp(buf,genbuf,PASSLEN)) { prints("\n\n新密码确认失败, 无法设定新密码。\n"); fail++; break; } 接着在bbs.h中加入: #ifndef CRACKLIBPATH #define CRACKLIBPATH "/usr/lib/cracklib_dict" #endif 注意这里是字典所处的位置. 最后改动bbs的Makefile: OS_DEF = -DLINUX -DTERMIOS CC = gcc CFLAGS = -O2 /* ----------- begin ---------- */ LIBS = -ltermcap -lbsd -lcrack /* ----------- end ---------- */ 然后make, make install就可以了. :-) 很简单, 不是吗? 注意:本段关于cracklib的说明转载于[网络工作室] B、Proactive Checking 这个程序能在输入口令时进行一系列的口令检查,这会对避免不安全口令出现于你的系统有帮助作用。它与一般的shadow和NIS(也就是yellow page)口令系统共同工作。 C、Shadow 这个程序取代了原来系统的口令保护机制,它将/etc/passwd文件中的口令信息转移到文件/etc/shadow中,还有一些如口令到期机制、允许16字符口令等功能。 D、Passwd+ 这是一个典型的增强型口令系统。 三、应有的措施及其基本知识 1、日志文件 大多数日志文件都是由系统一行接着一行写入的文本文件。比如sulog会记录用户使用su命 令试图进入系统的情况,在sulog文件尾部附加一条信息,以记录su命令是否被成功使用。不同版本的UNIX系统存放日志文件的目录不同,常见目录如下:/usr/adm 早期的UNIX系统/var/adm 较新版本的UNIX系统/var/log 用于Solaris\Linux\BSD等系统中在这些目录或其子目录下,你可以找到下列文件acct 或 pacct 记录每个用户使用过的命令aculog 拨出"猫"的记录lastlog 记录用户最后一次成功登陆时间及最后一次失败登陆时间loginlog 不良登陆记录messages 输出到主控台及由syslog系统服务程序产生的消息sulog su的使用情况 utmp 记录
当前
登陆的每个有户 utmpx 扩展的utmp wtmp 记录每一次用户登陆和注销的历史信息及系统开关信息 wtmpx 扩展wtmp vold.log 使用外部介质产生的错误 xferlog FTP存取情况 2、定期运行如crack之类的口令破解程序以检查系统中是否存在弱帐户。
查看关闭
端口
的方法及计算机
端口
介绍[详细列表]
㈠查看本机开放
端口
的方法1. Windows本身自带的netstat命令 关于netstat命令,我们先来看看windows帮助文件中的介绍: Netstat 显示协议统计和
当前
的 TCP/IP 网络连接。该命令只有在
安装
了 TCP/IP 协议后才可以使用。 netstat [-a] [-e] [-n] [-s
MODEM
综述
我们常说的
Modem
,其实是Modulator(调制器)与Demodulator(解调器)的简称,中文称为调制解调器。也有人跟据
Modem
的谐音,亲昵地称之为“猫”。我们知道,计算机内的信息是由“0”和“1”组成数字信号,而在电话线上传递的却只能是模拟电信号。于是,当两台计算机要通过电话线进行数据传输时,就需要一个设备负责数模的转换。这个数模转换器就是我们这里要讨论的
Modem
。计算机在发送数据时,先由
Modem
把数字信号转换为相应的模拟信号,这个过程称为“调制”。经过调制的信号通过
Serv-U组建个人FTP服务器, ——完全图解教程:FTP架设、
端口
映射、动态域名申请...
serv-u组建个人ftp服务器, ——完全图解教程:ftp架设、
端口
映射、动态域名申请(一) 为了支持“共享小组事务”的胜利开设,我花了两天时间,参考网上众老鸟文章之长,由我这小菜鸟集中修改~亲自截图编写~本教程使用附件提供的serv-u 6.0英文版(建议英文不好的使用汉化)在winxp操作系统下为例,面向对象是对serv-u一无所知的人。...
常用
端口
号
常用
端口
号2007年05月20日 星期日 下午 01:08 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入。计算机的"大门"就是我们平常所说的"
端口
",它包括计算机的物理
端口
,如计算机的串口、并口、输入/输出设备以及适配器接口等(这些
端口
都是可见的),但更多的是不可见的软件
端口
,在本文中所介绍的都是指"软件
端口
"...
硬件/系统
2,644
社区成员
17,232
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章