hook 别的进程的recv 取远程主机名咋取?可以有偿。 hook 别的进程的recv 取远程主机名咋取?可以有偿。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你要拿到SOCKET值?然后在本进程进行一下处理吗?比如getsockname什么的。SOCKET不一定像是HWND这种值,是跨进程也OK的 拿到socket应该没有用吧socket就是一个int而已,和HWND的概念差不多吧看看能不能hook recv假如能的话就没有问题但是这样貌似有点复杂,假如有别的条件的话,可以简单点如果就是为了拿到远程主机名,可以这样1)获取当前的TCP连接表2)查询特定端口号对应的连接3’)看能不能根据这个连接获得对方的host信息或者3‘‘)拿到该连接另一端的ip:port有这些信息,再获得对方的主机信息应该不难了吧 在目标进程里注入个dll,去hook recv然后用getpeername获取对方地址,再用进程间通信传回来? 对方的sock就可获得相关信息. ip端口 看到有偿我才点进来的,HOOK很容易,就是不知道recv里面的结构是什么样的,应该是先要取数据包的ip地址,然后解析成机器名就另外调用函数了。 大概就是这个样子,Hook的其余代码我博客里面有,远程注入的就你自己写了。recv有两个动态库有,一个是Ws2_32.dll,一个是wsock32.dll,下面只注入了Ws2_32.dll,得到的远程IP,端口,机器名,写入C:\files.txt// HOOK_MessageBox.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include "HOOK.h"#include <winsock.h>#pragma comment(lib,"Ws2_32.lib")Hook hook("Ws2_32.dll","recv");typedef int (PASCAL FAR *Message) (SOCKET s, char FAR * buf, int len, int flags);extern "C" int PASCAL FAR test (SOCKET s, char FAR * buf, int len, int flags){ TCHAR lbuf[1024]; DWORD write; HANDLE file=CreateFile(TEXT("C:\\files.txt"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file != INVALID_HANDLE_VALUE) { SetFilePointer(file, 0, NULL, FILE_END);//文件指针指向文件尾 struct sockaddr_in test; int dwsize = sizeof (test); ZeroMemory((void *)&test,dwsize); getpeername(s,(struct sockaddr*)&test,&dwsize); struct hostent *remoteHost = gethostbyaddr((char *) &test.sin_addr, 4, AF_INET); ZeroMemory((void*)buf,sizeof(buf)); wsprintf(lbuf,"远程IP地址:%s ,端口号:%d, 远程主机名:%s\n",inet_ntoa(test.sin_addr),ntohs(test.sin_port),remoteHost->h_name); WriteFile(file, lbuf, strlen(buf), &write, NULL); CloseHandle(file); } //查询完远程机器名后,要调用真正的recv函数处理 hook.UnHOOK(); int tmp = recv(s, buf, len, flags); hook.HOOK((INT32)test); return tmp;}BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ HMODULE dll=LoadLibrary("Ws2_32.dll");// HMODULE dll=LoadLibrary("wsock32.dll"); Message fun=(Message)GetProcAddress(dll,"recv"); switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: if (!hook.HOOK((INT32)test))//hook the function !hook.HOOK((INT32)test) { printf("HOOK error\n"); } FreeLibrary(dll); break; case DLL_PROCESS_DETACH: hook.UnHOOK(); //unhook the function break; default: break; } return TRUE;} 谢了。hook好象做不到。因为要过滤一个ip包。 VC++6.0如何加载图标资源 tcp/ip欺骗问题 打包运行的问题 工具栏 24位图片 各位大哥救救小女子啊:计算机语音控制系统设计中关于实现计算机指令控制系统的问题 求教:CPathDialog 类学习方法,疑问! 两个菜鸟问题,百分相送!请大家赐教!! 急需求助如何用VC++开发新的Explorer(在WINXP中) 在CEditView 内如何实现drop source??? 难道没有高手吗?!!!!!!!!!!!!!!!!!!!!!!!如何编程实现对可执行文件的图标更改?( 用VC和WINAPI如何实现对24位位图中任意像素的读写? FinalRelease函数
拿到socket应该没有用吧
socket就是一个int而已,和HWND的概念差不多吧看看能不能hook recv
假如能的话
就没有问题但是这样貌似有点复杂,假如有别的条件的话,可以简单点
如果就是为了拿到远程主机名,可以这样
1)获取当前的TCP连接表
2)查询特定端口号对应的连接
3’)看能不能根据这个连接获得对方的host信息
或者
3‘‘)拿到该连接另一端的ip:port有这些信息,再获得对方的主机信息应该不难了吧
recv有两个动态库有,一个是Ws2_32.dll,一个是wsock32.dll,下面只注入了Ws2_32.dll,得到的远程IP,端口,机器名,写入C:\files.txt// HOOK_MessageBox.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"
#include "HOOK.h"
#include <winsock.h>
#pragma comment(lib,"Ws2_32.lib")
Hook hook("Ws2_32.dll","recv");typedef int (PASCAL FAR *Message) (SOCKET s, char FAR * buf, int len, int flags);extern "C" int PASCAL FAR test (SOCKET s, char FAR * buf, int len, int flags)
{
TCHAR lbuf[1024];
DWORD write;
HANDLE file=CreateFile(TEXT("C:\\files.txt"),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (file != INVALID_HANDLE_VALUE)
{
SetFilePointer(file, 0, NULL, FILE_END);//文件指针指向文件尾 struct sockaddr_in test;
int dwsize = sizeof (test);
ZeroMemory((void *)&test,dwsize);
getpeername(s,(struct sockaddr*)&test,&dwsize);
struct hostent *remoteHost = gethostbyaddr((char *) &test.sin_addr, 4, AF_INET);
ZeroMemory((void*)buf,sizeof(buf));
wsprintf(lbuf,"远程IP地址:%s ,端口号:%d, 远程主机名:%s\n",inet_ntoa(test.sin_addr),ntohs(test.sin_port),remoteHost->h_name);
WriteFile(file, lbuf, strlen(buf), &write, NULL); CloseHandle(file);
}
//查询完远程机器名后,要调用真正的recv函数处理
hook.UnHOOK();
int tmp = recv(s, buf, len, flags);
hook.HOOK((INT32)test);
return tmp;
}BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
HMODULE dll=LoadLibrary("Ws2_32.dll");
// HMODULE dll=LoadLibrary("wsock32.dll");
Message fun=(Message)GetProcAddress(dll,"recv");
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
if (!hook.HOOK((INT32)test))//hook the function !hook.HOOK((INT32)test)
{
printf("HOOK error\n");
}
FreeLibrary(dll);
break;
case DLL_PROCESS_DETACH:
hook.UnHOOK(); //unhook the function
break;
default:
break;
}
return TRUE;
}
hook好象做不到。
因为要过滤一个ip包。