老生常谈:关于hook ws2_32.dll中send和recv函数的问题。 [问题点数:100分,结帖人CSDN]

Bbs1
本版专家分:0
Blank
蓝花 2003年6月 VB大版内专家分月排行榜第三
结帖率 95.65%
Bbs5
本版专家分:4554
Blank
黄花 2003年2月 C/C++大版内专家分月排行榜第二
Bbs10
本版专家分:188320
Blank
进士 2006年 总版技术专家分年内排行榜第五
2004年 总版技术专家分年内排行榜第八
Blank
银牌 2006年10月 总版技术专家分月排行榜第二
2006年9月 总版技术专家分月排行榜第二
Blank
铜牌 2006年5月 总版技术专家分月排行榜第三
Blank
微软MVP 2006年1月 荣获微软MVP称号
2008年1月 荣获微软MVP称号
2007年1月 荣获微软MVP称号
Bbs1
本版专家分:0
Blank
蓝花 2003年6月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Blank
蓝花 2003年6月 VB大版内专家分月排行榜第三
Bbs6
本版专家分:7060
Bbs1
本版专家分:0
Blank
蓝花 2003年6月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Blank
蓝花 2003年6月 VB大版内专家分月排行榜第三
Bbs7
本版专家分:28243
Blank
黄花 2008年4月 专题开发/技术/项目大版内专家分月排行榜第二
Bbs1
本版专家分:0
Bbs6
本版专家分:7239
Bbs1
本版专家分:0
Blank
蓝花 2003年6月 VB大版内专家分月排行榜第三
Bbs2
本版专家分:321
关于recv()和send()函数
比如说,先用<em>send</em>()<em>函数</em>发了一段数据,然后用<em>send</em>()发了另一段数据,另一端,也分别用了两个<em>recv</em>()接收,那这两段数据是不是一定会被正确接收,第一个<em>recv</em>()接收第一段数据,第二个<em>recv</em>()接收第二段数据,还是第一个可能会收到第二个的一部分,或第二个也可能受到第一个的一部分呢?
请教大师,hook send函数后,怎么得到其第二个参数buf的内容?
我写如下代码,目的是为了获得截获<em>send</em><em>函数</em>的第二个参数的内容: int WINAPI My_<em>send</em>(SOCKET s, const char FAR* buf, int len, int flag
hook sendmessage和od拦截 不同
-
Windows下Hook API技术(hook send)
什么叫Hook API?所谓Hook就是钩子的意思,而API是指Windows开放给程序员的编程接口,使得在用户级别下可以对操作系统进行控制,也就是一般的应用程序都需要调用API来完成某些功能,Hook API的意思就是在这些应用程序调用真正的系统API前可以先被截获,从而进行一些处理再调用真正的API来完成功能。在讲Hook API之前先来看一下如何Hook消息,例如Hook全局键盘消息,从而可
C# APIHOOK,用send函数作为例子
http://blog.csdn.net/angeljanne87/article/details/6181811点击打开链接
HOOK----send
DWORD <em>send</em>Code = 0x609E2FDA;//要写入的地址 DWORD <em>send</em>NR; DWORD JmpNextAddr = <em>send</em>Code+5;//跳回地址 PBYTE pbData; void DumpBuffer(PBYTE pBuffer,DWORD dwBufLen) { CString sMessage; //最终结果 sMessage.Empty(); fo
绿豆的API HOOK WS2_32.DLL SEND 拦截问题
我拦截的是 WS2_32.DLL rn用的是 mTag = m_oExpHooker.HookExport(mModBas, "<em>send</em>", False)rn拦截是成功的不过<em>问题</em>是很卡. 而且SEND好象是输入<em>函数</em> 是不是用这个拦截啊,还有就是怎么才能修改拦截的包,在哪个里面修改的rnrn处理的是用联众3打一拦截部分的rnPrivate Sub m_oExpHooker_BeforeAction(ByVal lHookID As Long, ByVal lHookType As Long, ByVal sAPIName As String, ByVal lpArgs As Long, fBlock As Boolean, lArgCount As Long, ByVal lReturnAddress As Long)rnrnmAA = Falsern'*******************************rnDim alArgsEx() As LongrnDim mBuff() As ByternDim mIndex As LongrnDim TempStr As Stringrn'*******************************rnWith m_oExpHookerrn'******************************************rn.GetArguments alArgsEx(), 4rn'Debug.Print alArgsEx()rn'If alArgsEx(2) = 20 Or alArgsEx(2) = 8 ThenrnReDim mBuff(alArgsEx(2) - 1) As Bytern.Pmemcpy2local VarPtr(mBuff(0)), alArgsEx(1), alArgsEx(2)rn'If CLng(mBuff(4)) = 1 Or alArgsEx(2) = 8 ThenrnTempStr = "===============================================" & alArgsEx(2) & vbCrLfrnFor mIndex = 0 To UBound(mBuff)rnTempStr = TempStr & Right$("0" & Hex(mBuff(mIndex)), 2) & " "rn'TempStr = TempStr & Chr(mBuff(mIndex)) & " "rnNextrnText2.Text = Text2.Text & TempStr & vbCrLfrnText2.SelStart = Len(Text2.Text)rn'End Ifrn' End IfrnEnd WithrnEnd Sub
sendrecv函数问题
我在网上看到rn这是发送、接收<em>函数</em>的原型rnint <em>send</em>( SOCKET s, const char FAR *buf, int len, int flags ); rnint <em>recv</em>( SOCKET s, char FAR *buf, int len, int flags ); rnrn看到网上说rn[color=#FF0000]<em>send</em>仅仅是把buf中的数据copy到s的发送缓冲区的剩余空间里[/color]rn[color=#FF0000]<em>recv</em><em>函数</em>仅仅是copy数据,真正的接收数据是协议来完成的[/color]rn这两句话我明白,就是SOCKET对象底层维护着一个接收和发送的缓存。在发送和接收的时候,都是对这个缓存操作的。rnrn现在我的<em>问题</em>是。如果服务器A 的 <em>recv</em>正在等待对方的数据堵塞在那里。对方客户A 的<em>send</em>已经把他要发送的数据copy到了他的缓冲区里,这时,突然对方关掉了SOCKET那么复制进客户A的发送缓存中的数据是否还会发送到我这边?我这边是接收到完整的数据。还是返回服务器A 的<em>recv</em><em>函数</em>返回SOCKET_ERROR?rnrn请高手指点
C# HOOK 能不能同时Send、Recv函数
rn下面的代码,同时安装勾子会出错,现在的代码只能勾一个<em>函数</em>rn private void Form1_Load(object <em>send</em>er, EventArgs e)rn rn <em>send</em>_Hook.Install("<em>ws2_32.dll</em>", "<em>send</em>", Marshal.GetFunctionPointerForDelegate(new <em>send</em>Callback(<em>send</em>Proc)));rn <em>send</em>_Hook.Install("<em>ws2_32.dll</em>", "<em>recv</em>", Marshal.GetFunctionPointerForDelegate(new <em>recv</em>Callback(toProc)));rn rnrn[color=#FF0000]怎么才能即可接截Send,也可Recv[/color][b][/b]rnrn[code=csharp]using System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Linq;rnusing System.Text;rnusing System.Windows.Forms;rnrnusing System.Collections;rnusing System.Runtime.InteropServices;rnusing api_<em>hook</em>;rnrnrnnamespace api_<em>hook</em>_封包学习rnrn public partial class Form1 : Formrn rn [DllImport("<em>ws2_32.dll</em>")]rn static extern int <em>send</em>(int s, byte[] buf, int len, int flag);rnrn [DllImport("<em>ws2_32.dll</em>")]rn static extern int <em>recv</em>(int s, byte[] buf, int len, int flag);rnrn APIHOOK <em>send</em>_Hook = new APIHOOK();rn delegate int <em>send</em>Callback(int s, IntPtr buf, int len, int flag);rn delegate int <em>recv</em>Callback(int s, IntPtr buf, int len, int flag);rn public Form1()rn rn InitializeComponent();rn rnrn private void Form1_Load(object <em>send</em>er, EventArgs e)rn rn <em>send</em>_Hook.Install("<em>ws2_32.dll</em>", "<em>send</em>", Marshal.GetFunctionPointerForDelegate(new <em>send</em>Callback(<em>send</em>Proc)));rn <em>send</em>_Hook.Install("<em>ws2_32.dll</em>", "<em>recv</em>", Marshal.GetFunctionPointerForDelegate(new <em>recv</em>Callback(toProc)));rn rnrn int <em>send</em>Proc(int s, IntPtr buf, int len, int flag)rn rn byte[] buffer = new byte[len];rn Marshal.Copy(buf, buffer, 0, len); //读封包数据,读取后可进行条件修改,拦截,转发等,记得处理后调用发送 rn <em>send</em>_Hook.Suspend(); //暂停拦截,转交系统调用 rn int ret = <em>send</em>(s, buffer, len, flag); //发送数据,此处可进行拦截rn <em>send</em>_Hook.Continue(); //恢复HOOK rn return ret;rn rn int toProc(int s, IntPtr buf, int len, int flag)rn rn byte[] buffer = new byte[len];rn Marshal.Copy(buf, buffer, 0, len); //读封包数据 rn <em>send</em>_Hook.Suspend(); //暂停拦截,转交系统调用 rn int ret = <em>recv</em>(s, buffer, len, flag); //发送数据,此处可对包进行处理操作rn <em>send</em>_Hook.Continue(); //恢复HOOK rn return ret;rn rn private void button1_Click(object <em>send</em>er, EventArgs e)//按下时加载网页进行测试数据rn rn webBrowser1.Navigate("http://baidu.com");rn rn rn//APIHOOK关键代码类rn public class APIHOOKrn rn #region Api声明rn [DllImport("Kernel32.dll", EntryPoint = "GetModuleHandleA", CharSet = CharSet.Ansi)]rn static extern IntPtr GetModuleHandle(rn string lpModuleNamern );rn [DllImport("Kernel32.dll")]rn static extern bool VirtualProtect(rn IntPtr lpAddress,rn int dwSize,rn int flNewProtect,rn ref int lpflOldProtectrn );rn [DllImport("Kernel32.dll", EntryPoint = "lstrcpynA", CharSet = CharSet.Ansi)]rn static extern IntPtr lstrcpyn(rn byte[] lpString1,rn byte[] lpString2,rn int iMaxLengthrn );rn [DllImport("Kernel32.dll")]rn static extern IntPtr GetProcAddress(rn IntPtr hModule,rn string lpProcNamern );rn [DllImport("Kernel32.dll")]rn static extern bool FreeLibrary(rn IntPtr hModulern );rn #endregionrn #region 常量定义表rn const int PAGE_EXECUTE_READWRITE = 0x40;rn #endregionrn #region 变量表rn IntPtr ProcAddress;rn int lpflOldProtect = 0;rn byte[] OldEntry = new byte[5];rn byte[] NewEntry = new byte[5];rn IntPtr OldAddress;rn #endregionrn public APIHOOK() rn public APIHOOK(string ModuleName, string ProcName, IntPtr lpAddress)rn rn Install(ModuleName, ProcName, lpAddress);rn rn public bool Install(string ModuleName, string ProcName, IntPtr lpAddress)rn rn IntPtr hModule = GetModuleHandle(ModuleName); //取模块句柄 rn if (hModule == IntPtr.Zero) return false;rn ProcAddress = GetProcAddress(hModule, ProcName); //取入口地址 rn if (ProcAddress == IntPtr.Zero) return false;rn if (!VirtualProtect(ProcAddress, 5, PAGE_EXECUTE_READWRITE, ref lpflOldProtect)) return false; //修改内存属性 rn Marshal.Copy(ProcAddress, OldEntry, 0, 5); //读取前5字节 rn NewEntry = AddBytes(new byte[1] 233 , BitConverter.GetBytes((Int32)((Int32)lpAddress - (Int32)ProcAddress - 5))); //计算新入口跳转 rn Marshal.Copy(NewEntry, 0, ProcAddress, 5); //写入前5字节 rn OldEntry = AddBytes(OldEntry, new byte[5] 233, 0, 0, 0, 0 );rn OldAddress = lstrcpyn(OldEntry, OldEntry, 0); //取变量指针 rn Marshal.Copy(BitConverter.GetBytes((double)((Int32)ProcAddress - (Int32)OldAddress - 5)), 0, (IntPtr)(OldAddress.ToInt32() + 6), 4); //保存JMP rn FreeLibrary(hModule); //释放模块句柄 rn return true;rn rn public void Suspend()rn rn Marshal.Copy(OldEntry, 0, ProcAddress, 5);rn rn public void Continue()rn rn Marshal.Copy(NewEntry, 0, ProcAddress, 5);rn rn public bool Uninstall()rn rn if (ProcAddress == IntPtr.Zero) return false;rn Marshal.Copy(OldEntry, 0, ProcAddress, 5);rn ProcAddress = IntPtr.Zero;rn return true;rn rn static byte[] AddBytes(byte[] a, byte[] b)rn rn ArrayList retArray = new ArrayList();rn for (int i = 0; i < a.Length; i++)rn rn retArray.Add(a[i]);rn rn for (int i = 0; i < b.Length; i++)rn rn retArray.Add(b[i]);rn rn return (byte[])retArray.ToArray(typeof(byte));rn rn rn[/code]rnrn
Hook API ws2_32.dll recv函数后读取buf的问题
我使用easy<em>hook</em>库勾住<em>recv</em>成功后如何将buf的值遇到<em>问题</em>,不知道如何正确的读取buf参数中的数据。求解!rn Public Shared Function <em>recv</em>_<em>hook</em>ed( ByVal s As IntPtr, _rn ByRef buf As Byte, _rn ByVal len As Int32, _rn ByVal flags As Int32) As Int32rn
send函数recv函数
里面有socket<em>函数</em>和<em>recv</em><em>函数</em>的详细讲解,有用
100分求解 用madCodeHook Hook Send和Recv的问题
目前可以正常呼出HOOK窗口..但是记录不到封包.... 全部代码如下.... 还试过 HookAPI('wsock32.dll' 同样不行.... Unit MainUnit; Interface
求一个完整的Hook send ,recv 函数的完整例子。。。随便用的什么库。。
我只会c#,c++没用过,只需要修改一下简单的明文封包,想用c++做一个dll供c#调用,希望能求到一个完整一点的<em>hook</em> <em>send</em>,<em>recv</em>的例子。。。谢谢
hook拦截send()
我希望做一个全局的钩子,能够拦截到Winsocket的<em>send</em>()的数据。我是这样做的,在一个应用程序中注入一个全局的(DLL)的钩子: _declspec(dllimport) void SetHo
C#2008中 成功HOOK了send发送封包,但同样方法HOOK了recv拦收封包打开网页乱码
在网上看了 <em>ws2_32.dll</em>中的<em>send</em>与<em>recv</em><em>函数</em>结构应是一样的,但HOOK发送正确 HOOK接收就打开网页是乱码 先上代码 新建一个窗品程序,两个控件(webBrowser1,button1
hook socket send recv的代码(zz)
 (zzfrom)http://hack.gameres.com/showthread.asp?threadid=3379<em>hook</em> socket <em>send</em> <em>recv</em>的代码(1) 最后更新:2005.07.17 本程序演示如何拦截一个程序对<em>send</em>、<em>recv</em><em>函数</em>的调用, 并把<em>send</em>、<em>recv</em><em>函数</em>的参数用 WM_COPYDATA 消息发送 到监视程序中。附带演示如何拦截Direc
关于sendrecv函数的看法
两<em>函数</em>均有len参数。rnA,B两端为异步select下,rn A循环调用<em>send</em>发送,每次发送1Byte(len=1),共发送10次;rn B循环调用<em>recv</em>,每次接收10Bytes(len=10),接收10次才完毕。rn A调用<em>send</em>发送,一次发送10Bytes(len=10);rn B循环调用<em>recv</em>,每次接收1Bytes(len=1),接收10次才完毕。rnrnA,B两端为同步(默认)下,rn A循环调用<em>send</em>发送,每次发送1Byte(len=1),共发送10次;rn B循环调用<em>recv</em>,每次接收10Bytes(len=10),接收1次即可。rn A调用<em>send</em>发送,一次发送10Bytes(len=10);rn B循环调用<em>recv</em>,每次接收1Bytes(len=1),接收10次才完毕。rnrn 因此看出异步select与默认情况下,<em>send</em>,<em>recv</em>的行为不同。rnrn请大家说说你是怎么看这一情况的rn
关于 recvsend问题
比如现在有5个客户机与服务器连接成功了,只要客户机向服务器发送一个数据,服务器就向客户机会送该数据。现在怎样实现服务器只向发送数据的客户机会送数据。rn例如:当第一个客户机向服务器发送一个数据时,那么服务器只向第一个客户机会送该数据,而不向另外四个客户机回送。怎么处理????rn我现在实现的时,服务器向5个客户机都回送了。用的连接<em>函数</em>是accept();rn请大家帮我解决一下rn谢谢大家了
C/C++ 中的关于recv send函数
我们公司用TCP 发送数据时,包括简单消息,都用循环加这两个<em>函数</em>,这样的话,当消息很少时,就必须得双方先指定好消息的长度。也就是说得多发送一次数据。否则双方就死锁。全都在等待数据。rn请问一下,这是正常的解决方式么?rn如果用循环,那么每次发送多少数据合适呢?
sendrecv函数问题请教
如何使用<em>send</em><em>函数</em>发送一个double型的数组,例如, double Data[6], 还有,怎么用<em>recv</em><em>函数</em>接受这6个数值呢?
send()或recv()函数问题
char buffer[1024];rnchar temp[1024];rnint rcv = <em>recv</em>(s,buffer,1024, 0);rniEnd = <em>send</em>(pDlg->m_hSocket, temp, ilen,0);rn这里面的第二个参数要求是char *,如果要发送或是接收unsigned char *型的怎么办呢?强制转成char *,信息会不会丢失?
hook send recv wsasend wsarecv 封包工具源码
<em>hook</em> <em>send</em> <em>recv</em> wsa<em>send</em> wsa<em>recv</em> 封包工具源码 本工具支持命令行操作,采用远程线程注入目标进程,注入后<em>hook</em>发包<em>函数</em>,实现封包拦截。 主程序为MFC编写 动态链接库VC
HOOK Send函数截取游戏数据包
前两天写了一个HOOK微软的加密<em>函数</em>然后打Log的Detours的例子,还是不够直观,这次举个简单的例子,其实完全可以应用在不加密的游戏游戏数据分析上,当然当前不加密明文传输的少之又少,此处只为学习方法。 首先在VC下建立一个DLL工程,不需要使用MFC DLL,因为不需要那个框架里面的东西。 然后新增一个源文件,写入相关代码 #include #include #in
如何用HOOK捕获和修改sendto()这个Api函数
我希望做一个全局的钩子,能够拦截到WinSocket的<em>send</em>to()的数据。我是这样做的,在一个应用程序中注入一个全局的(DLL)的钩子: _declspec(dllimport) void Set
Hook了send以后,怎么实现主动让目标程序发送数据?
具体说就是我<em>hook</em>了<em>send</em>以后,已经可以成功截获数据包并且可以修改,但是我希望实现在我的程序中按一个按钮,能让目标被<em>hook</em>的程序发送一个数据包出去,我保存了socket以后直接<em>send</em>一点反应也
Hook Socket API之后改变http报文头数据篡改send内容
socket库中的<em>send</em>和<em>recv</em><em>函数</em>在被自定义的<em>hook</em><em>函数</em>监视劫持后,想把<em>send</em>发送过程的http报文头里目标网站篡改,虽然把host:的域名替换了,但是结果浏览器显示的效果是请求被服务器禁止了,错误代码403,这时,WireShark显示的http数据中目标IP地址仍然是未篡改网站的IP,也就是说,我一直在向它请求另一个网站的数据,服务器自然会禁止我的非法请求。那么,不光要<em>hook</em>住se
关于recvsend这两个函数问题?
在建立TCP连接后,如果发送方<em>send</em> 50个字节,而接收方<em>recv</em> 100这个字节,这时候<em>recv</em>收到这个50个字节的之后<em>recv</em><em>函数</em>会不会返回呢?还是继续阻塞程序的下一步执行,等到<em>recv</em>满100字节后再返回啊?说白了,<em>recv</em><em>函数</em>什么时候返回?rnrn相反,如何发送方<em>send</em> 100这字节,接收方<em>recv</em> 50个字节,这是<em>recv</em>接受满50个字节的时候应该就结束了,但是这时<em>send</em><em>函数</em>处于什么状态呢? TCP连接不是能保证数据不丢失吗?rnrn这些一直都不是很明白,哪位仁兄给我说说啊,谢谢了!
请教关于sendrecv函数问题
谢谢大家帮忙解答:rnrn<em>问题</em>是这样的rn在我的客户端,我传输时这样写的:(使用的多线程,所以下面这个是线程内方法)rnvoid * ClientFolder::Run(void *param)rn rn rn char snd_buf[1024];rn rn bzero(snd_buf,1024);rn rn vector::iterator it;rn rn for (it = folder_names.begin(); it != folder_names.end(); it++)rn rn strcpy(snd_buf,(*it).c_str());rn <em>send</em>(SocketFd,snd_buf,strlen(snd_buf),0);rn //sleep(1);rn cout << snd_buf << endl;rn //<em>send</em>(SocketFd,Ok_msg,strlen(Ok_msg),0);rn bzero(snd_buf,1024);rn rn rn <em>send</em>(SocketFd,Over_msg,strlen(snd_buf),0);rn rnrnrn服务端相应的方法如下:rnrnvoid ServerFolder::RecvFolder()rn rn struct sockaddr_in client_addr;rn socklen_t length = sizeof(client_addr);rn rn int new_server_socket = accept(SocketFd,(struct sockaddr*)&client_addr,&length);rn rn if ( new_server_socket < 0)rn rn printf("Server Accept Failed!\n");rn exit(-1);rn rn rn folder_names.clear();rn rn char buffer[1024];rn bzero(buffer, 1024);rn rn while((<em>recv</em>(new_server_socket,buffer,1024,0))>0)rn rn cout << buffer<
send()函数recv()函数的处理问题
我想发送rnchar info[]="hello word"rnrn在<em>send</em>()<em>函数</em>中应该是<em>send</em>(s,info,strlen(info),0);还是(s,info,strlen(info)+1,0);rnrn同时在接受上述信息时应该用<em>recv</em>(s,&NenInfo,st[color=#FF0000]rlen(info),[/color]0)还是rn<em>recv</em>(s,&NenInfo,[color=#FF0000]strlen(info)+1[/color],0)
关于 API HOOK 改了recv函数问题
<em>关于</em> API HOOK 改了<em>recv</em>等接收<em>函数</em>rn我只要打开钩子,IE就不能打开网页了,QQ这些都是正常的!rn去他地方没有截获接收到的数据rnrnrn我用<em>hook</em>_<em>recv</em> 来代替 <em>recv</em>(),其他的接收<em>函数</em>都差不多!rn代码:rnint WINAPI <em>hook</em>_<em>recv</em>(SOCKET s, char FAR* buf, int len, int flags ) rnrn CShareMemory sm("IPPACK_RECEIVE",sizeof(CMessageData)+len,TRUE);rn CMessageData *pData = (CMessageData*)sm.GetBuffer();rnrn g_<em>recv</em>.Un<em>hook</em>();rn int Ret = <em>recv</em>(s,pData->data(),len,flags);rn g_<em>recv</em>.Re<em>hook</em>();rnrn pData->scoket = s;rn pData->dwThreadId = ::GetCurrentThreadId();rn pData->DataLength = Ret;rnrn ::SendMessage(g_hWndCaller,HM_RECEIVE,0 ,0 );rnrn // 返回数据rn memcpy(buf, pData->data(), pData->DataLength);rn return Ret;rnrn
hook send/sendto函数问题
想练习一下inline <em>hook</em>,exe程序用来加载此DLL,得到指定进程的线程ID,调用此DLL导出的Install<em>hook</em>()<em>函数</em>用来对指定的进程安装钩子过程,想inline <em>hook</em> 此进程的WS2_32.dll的一些<em>函数</em>,想拦截包。下面是一个完整DLL工程,但是遇到了一个奇怪的<em>问题</em>,把#include 这句注释掉能编译成功,加上之后,会出现下面的错误。rn哪位兄弟帮我看下啊。rnrn下面是下载地址rnhttp://www.brsbox.com/filebox/uploadcomplete/randstr/4961I2HMGmj48c72Tu87JW1915/fgid/707c09885160b93194337095a3e7c0fa/dirids/0rnrn1>------ 已启动生成: 项目: FuckVClient, 配置: Debug Win32 ------rn1>正在编译...rn1>FuckVClient.cpprn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : 参见“AF_IPX”的前一个定义rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: “AF_MAX”: 宏重定义rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : 参见“AF_MAX”的前一个定义rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: “SO_DONTLINGER”: 宏重定义rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : 参见“SO_DONTLINGER”的前一个定义rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: “sockaddr”: “struct”类型重定义rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : 参见“sockaddr”的声明rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 语法错误 : 缺少“”(在“常量”的前面)rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 语法错误 : 缺少“;”(在“常量”的前面)rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: 语法错误 : “常量”rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: 语法错误 : 缺少“;”(在“”的前面)rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(518) : warning C4005: “IN_CLASSA”: 宏重定义rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(287) : 参见“IN_CLASSA”的前一个定义rn1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(524) : warning C4005: “IN_CLASSB”: 宏重定义rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(293) : 参见“IN_CLASSB”的前一个定义rn的链接rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(778) : 参见“inet_addr”的声明rn1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1745) : error C2375: “inet_ntoa”: 重定义;不同的链接rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(780) : 参见“inet_ntoa”的声明rn1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1763) : error C2375: “listen”: 重定义;不同的链接rn1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(782) : 参见“listen”的声明rn
新手关于拦截封包recv send问题
想抓取http的post和get数据,HOOK了<em>ws2_32.dll</em>的<em>recv</em>和wsock32.dll的<em>recv</em> <em>问题</em>是为什么总有一些数据拦截不到呢,而使用谷歌浏览器或httpwatch抓包都可以看到
为什么HOOK不到send函数呢?
我想HOOK到QQ中的<em>send</em><em>函数</em>,为什么不行呢?
hook socket send
<em>hook</em> socket <em>send</em>
delphi hook send和Recv
有时候我们需要对其它应用程序发送和接收的网络数据进行拦截,比如要对IE发送的HTTP头进行分析,得到请求的地址等.这次我们可以用一些例如WPE, Sniffer之类的工具来达到目的.但是工具功能有限,要想实现更强大的功能,还是我们自己动手来DIY吧.       拦截网络数据封包的方法有三种,一是将网卡设为混杂模式,这次就可以监视到局域网上所有的数据包,二是HOOK目标进程的发送和接收的API函
怎样用APIHOOK钩住WS2_32.dll里的send等?
用APIHOOK里的CapConsole改写后,可以钩住不少API<em>函数</em>,不过钩<em>send</em>的时候总是失败?什么原因?
菜鸟问题关于send(),recv()
在使用winsock编程时,如果要调用<em>send</em>(),<em>recv</em>(),accept()等<em>函数</em>,除了#include "winsock.h"之外还需要什么头文件吗?rn程序编译的时候没有<em>问题</em>,但是老是报连接错误:rnClient.obj : error LNK2001: unresolved external symbol _<em>recv</em>@16rnchatDlg.obj : error LNK2001: unresolved external symbol _<em>send</em>@16rnClient.obj : error LNK2001: unresolved external symbol _<em>send</em>@16rnchatDlg.obj : error LNK2001: unresolved external symbol _accept@12rnClient.obj : error LNK2001: unresolved external symbol _connect@12rnrn谢谢各位!
关于recv , send 数据结构的问题!!!!!!!!!!!!!!!!!
struct aaa rn int len;//这个是记录pt分配的长度rn char* pt;//由于pt是变长的所以我用指针rn ;rnrn aaa str;rn str.pt = new char[100];rn strcpy(str.pt, "hello the world");rn str.len = strlen(str.pt);rnrn byte* p<em>send</em> = new byte[sizeof(str)+str.len];rn memcpy(p<em>send</em>, &str, sizeof(str));rn memcpy(p<em>send</em>+sizeof(str), str.pt, str.len);rnrn <em>send</em>(sk, (char*)p<em>send</em>, sizeof(str)+str.len, 0);rnrnaaa a;rnint len = <em>recv</em>(from[i], (char*)&a, sizeof(a), 0);//这里我先接收结构体,从而获得串的长度,rnlen = <em>recv</em>(from[i], pt, a.len, 0);//通过长度把剩余的数据接收,但是pt里的内容不是"hello the world",为什么,哪里错了?
关于socket的send(),recv()的问题.
为什么在<em>recv</em>()之后,用<em>send</em>()时,client没有拿到数据,而<em>send</em>()的返回值却是成功发送的标志。而在<em>recv</em>()之前,用<em>send</em>()时,client是拿到数据的。rn新手,有相关的文章吗?谢谢!
关于sendrecv的顺序问题
我刚开始学socket编程,比较菜。大家先看我下面的做法对不对:(TCP)rnrn服务器端:rn1.socketrn2.bindrn3.listenrn之后做一个死循环:accept接受客户端的连接,<em>send</em>和<em>recv</em>实现与客户端的交互,closesocket断开本次连接rn做死循环是为了接受多个客户端的连接请求rnrn客户端的工作是:rn1.socketrn2.bindrn3.connect连接服务器rn4.<em>send</em>和<em>recv</em>实现与服务器端的交互rn5.closesocket断开连接rnrn我知道,在连接建立以后,<em>send</em>只是往发送缓冲区送数据,<em>recv</em>则是从接受缓冲区“抓”数据。rn我的<em>问题</em>是,缓冲区对于进来和出去的数据是怎么处理的?能不能认为客户端两次连续的<em>send</em>送达服务器端的时候还是连续的?rn比如说,客户端第一次发送“first”外加结束符‘\0’,第二次发送“second”外加结束符'\n',那么在服务器端接受到的数据是不是一定就是“first\nsecond\n”呢?也就是说,在服务器端能不能用一个足够大的缓冲区一次性接受这客户端的两次发送呢?rn如果不行的话,是不是说在服务器端必须<em>recv</em>两次?那么我怎么样判断接受到的数据是first还是second呢?rnrn服务器端和客户端点在一次连接中的<em>send</em>和<em>recv</em>的次数是不是必须相等?
关于连续sendrecv问题
我在服务器端连续向客户端发两个<em>send</em>,用来传送数据,如果数据很长,我在两个不同的数据段中加入了不同的数据头。在客户端循环接收,那在客户端<em>recv</em>时,会不会把第一次rn<em>send</em>中的尾部数据和第二个<em>send</em>中的数据头混在一起,在一个<em>recv</em>循环中接收呢,就是说,一次<em>recv</em>,收两个数据包了,如果会怎么处理呢??
9.什么是send或者WSASend?
各位亲爱的朋友: 我们又在VIP辅助基础课程相会了,那么,这节课,我将与你分享什么是<em>send</em>或者WSASend? TCP协议使用的<em>send</em>、<em>recv</em>、WSASend和WSARecv, UDP协议使用的<em>send</em>to、<em>recv</em>from、WSASendTo 和WSARecvFrom。 TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正
Win7 od下send断点
参考文章:http://laokaddk.blog.51cto.com/368606/283702 --------------------------------------------------------------------------------------------------------------------------------- 在win7中,如果直接bp  sen
如何用重写TCP协议,或者修改ws2_32.dll文件
-
如何HOOK WS2_32.DLL中的RECV函数
目标:取得另一个进程中的RECV<em>函数</em>地址 想取得另一个进程中的<em>ws2_32.dll</em>中的<em>recv</em>的地址,但出错,查看是"找不到指定的模块"。 把<em>ws2_32.dll</em>换成kernel32.dll,<em>recv</em>
c# hook ws2_32.dll 问题
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServ
关于sendrecv的对应
请问发送端发送定长数据包后, 等待接收端返回一个确认字节, 发送端在接到这个确认字节后, 接着发送下一包. 这是怎么实现的啊,rntcp每次调用<em>send</em>的时候系统把数据放在缓冲区并没发送去,而接收方可能一次<em>recv</em>接收到几个<em>send</em>的数据。能不能<em>send</em>一次,然后<em>recv</em>一次,然后再<em>send</em>呢
socket中,sendrecv问题send失败了,recv会知道吗?)
<em>问题</em>描述:rn我在程序设计中对客户端的<em>send</em>进行了错误控制,并对服务端的<em>recv</em>进行了错误控制,现在的<em>问题</em>就是,我不知道客户端要是<em>send</em>失败了 (也就是<em>send</em> 的长度 < 0)rn rn perror("<em>send</em> fail msg fail")'rn return -1;rn rn-------------------------------------------------------------------rn服务端:rnif ( (<em>recv</em>(m_socket_fd, rcv_buf, 1024, 0) < 0) || (strcmp(rcv_buf,Fail_msg) != 0) )rn rn perror("<em>recv</em> end ok msg fail");rn fclose(fd);rn return -1;rn rn--------------------------------------------------------------------rn如这样的错误控制,如果客户端的<em>send</em> 出错了,那么客户端退出,而服务端呢?会不会也随之退出?还是阻塞在那儿?rn或者,要是<em>send</em>这边慢了。服务端是否也会判断接收出错?然后退出?rn
关于send()与recv()
1、<em>send</em><em>函数</em>没有目标ip地址,那么它将buffer内容发送到哪里?rn2、同样,<em>recv</em><em>函数</em>也没ip地址来标识它要从哪获取数据rnrn个人想法:<em>send</em>和<em>recv</em>都有socket参数,来指明在哪个socket上进行收发包,如果<em>send</em>和<em>recv</em>都用同一个socket句柄作为参数,那么容易理解<em>send</em>的目标地址以及<em>recv</em>的源地址。但是,客户端朝服务器发包,显然客户端<em>send</em><em>函数</em>的socket与服务器端的socket是两码事。我该怎么理解?rnrn
关于recvsend?
[code=C/C++]//发送端源码rn for(int i = 0; i < 10; ++i)rn rn <em>send</em>(sockClient,"This is lisi",strlen("This is lisi")+1,0);rn rnrnrn//接收端源码rn SOCKET sockSrv = (SOCKET)lpParam;rn SOCKADDR_IN addrClient;rn int len=sizeof(SOCKADDR);rn bool flag = false;rn while(1)rn rn SOCKET sockQiantai = accept(sockSrv,(SOCKADDR*)&addrClient,&len);rn flag = true;rnrn while(flag)rn rn char *<em>recv</em>Buf = new char[RECVBUF_MAXNUM];rn <em>recv</em>(sockQiantai, <em>recv</em>Buf, RECVBUF_MAXNUM, 0);rn rn if(jiance(<em>recv</em>Buf))rn rn flag = true;rn printf("<em>recv</em>Buf:%s\n", <em>recv</em>Buf);rn rn elsern rn flag = false;rn printf("false\n");rn rn delete <em>recv</em>Buf;rn rnrn closesocket(sockQiantai);rn rn rn return 0;rnrn[/code]rnrn正常应该打印十次的 但是基本上就打印一次 向高手求教
关于套接字的send recv
比如客户端向服务端分别<em>send</em> a,b,c数据包,a,b,c数据包里的数据分别是1,2,3TCP是基于字节流无边界的,rn假设上面三个数据包分两次到达,第一次到达的是a数据包+b包头,第二次到达的是b包体+c数据包rn那服务端是如何正确得到数据1,2,3的呢,求其中的流程,谢谢。
通过API Hook修改IAT中函数地址为何截获不了Ws2_32.dll的recv() ?
通过下全局API Hook修改IAT中<em>函数</em>地址为何截获不了Ws2_32.dll的<em>recv</em>() (2) 在ActiveKey.h文件中加入HOOKAPI结构,此结构用来存储被挡截API<em>函数</em>名称、原API
ws2_32.dll
瑞星打不开,总说"应用程序初始化失败......",后来才知道是由于其安装目录中多了一个文件:<em>ws2_32.dll</em>,将其删除即可. 如果不想让别人使用某个软件只要在其安装目录下新建一个文件名为<em>ws2_32.dll</em>的文件,这样系统就会以文件出错误而禁止运行(可以新建一个内容为空的文件夹,然后改名为<em>ws2_32.dll</em>)本方法适用基于NT系统的WinXP,Win200...
(一) Windows环境下的Detours编译
软件名称 版本 安装路径 下载地址 mysql 5.6 C:\Program Files\MySQL\MySQL Server 5.6\bin 点此下载 visual studio 2013 ...
这个世界变了吗?怎么HOOK不到ws2_32.dll
刚学API HOOK,搞了个例子试验了几天,就是HOOK 不到 <em>send</em>to之类的<em>函数</em>,今天找出<em>问题</em>所在,被我HOOK的进程的PE表里面竟然没有<em>ws2_32.dll</em>的记录!! 但是不知道原因,哪位高手
写自己的软件用ws2_32做网络劫持破解
用<em>ws2_32.dll</em>做HOOK劫持IP 易语言编写。附带所需模块和视频教程
关于SOCKET中send(),recv()返回值的问题
在socket编程中,使用<em>send</em>(),<em>send</em>to(),<em>recv</em>(),<em>recv</em>from(),都回有一个int型的返回值,代表发/收的字节数,如果返回-1,说明socket错误,但返回0时,代表什么呢?rn仅仅是表示发收了0byte吗,何时或者为什么会返回0,如果socket正常的话为什么会返回0,如果socket异常的话,为什么不返回error,在编程中应如何返回0,是不是应当与返回SOCKET_ERROR同样对待.rnthanks
关于socket 中sendrecv问题,请教?
rn我一个客户端,rn有server_Socketrn通过socket()->bind()->LisTen()rnrn一个服务端。rn有client_Socketrn通过socket()->connect();rnrn我在WSAAsyncSelect() 中用accept 产生了一个新的new_socket,rn又用了WSAAsyncSelect()侦听 FD_READ, rn这样通讯双方就建立好了。rn我希望一旦客户端使用<em>send</em>()rn服务端就可以用<em>recv</em>()收到信息。做到这也很顺利。rnrn在一个button 中写了 rn getmem(p,1024);rn strpcopy(p,edit6.Text);rn <em>send</em>(newsock,p,strlen(p),0);rn freemem(p);rn目的是客户端发送消息。rnrn在响应消息中rn if message.LParam=FD_READ thenrnbeginrn getmem(p,1024);rn <em>recv</em>(newsock,p,1024,0);rn ;rn Edit5.Text:=strpas(p);rn freemem(p);rnend;rn目的是服务端接收消息。rnrn消息发出来了,rn为什么这里就接收不到?rn谢谢!
网络编程中关于send & recv问题
我在编程的时候遇见了一个很奇怪的问,发送出去的数据和接收到的数据不一样!具体来说是这样的,我编写了一个发文件的程序。经测试,这个程序可用,发个几兆的文件也不成<em>问题</em>。然后想在此程序的基础出加入对文件的HASH,接收方接收到文件并在本地作HASH后,与传过来的HASH作比较,如果想等,则认为收的数据未被篡改;如果不相等,则认为数据遭到篡改,发出警告。我不明白我的程序为什么出现了发送的数据的HASH值与接收到的不一样?rn程序实现具体实现如下:rn发送方:rn while(FileLeft > MAX_FILE_BLOCK)rn rn file.Read(data,MAX_FILE_BLOCK);rnrn //对传送数据做HASHrn char hash_buff[HASH_LEN] = "\0";rn HASH(data, hash_buff);rn rn FileSend = <em>send</em>(socketSend, data, MAX_FILE_BLOCK, 0);rn FileSend = <em>send</em>(socketSend, hash_buff, HASH_LEN, 0);rn rnrn接收方:rnwhile(FileLeft > MAX_FILE_BLOCK)rn rn char <em>recv</em>_hash[HASH_LEN + 1] = "\0";rnrn FileRec = <em>recv</em>(socketSend, data, MAX_FILE_BLOCK, 0);rn// Sleep(10);rn FileRec = <em>recv</em>(socketSend, <em>recv</em>_hash, HASH_LEN, 0);rn// Sleep(10);rnrn char hash[HASH_LEN + 1] = "\0";rn HASH(data, hash);rnrn if(!strcmp(hash, <em>recv</em>_hash))rn rn ……rn rn elsern rn MessageBox(NULL,"文件被篡改!","文件",MB_OK);rn return 0;rn rn rn 文件是分块发送的。rn 很奇怪的现在是,如果单独调试发送方或接收方,程序都会发出“文件被篡改”的警告;但如果是同时调试发送方和接收方,就不会发出警告。rn如果将一次发送的块的大小,即MAX_FILE_BLOCK由原来的1024改大到2048时,程序报警的时刻就比1024时推迟很多。举例来说,块大小为1024时,程序可能在第二次循环时报警;增大为2048时,可能在第5次时报警。(只是打个比方,具体数值是多少不好弄清楚,呵呵~~)。rn 而且,我发现,在我朋友的电脑上,如果块大小增大为2048时,程序运行正确;在我机子上,程序就不正确。这难还与机子有关?rn 经过调试,发现与文件发送与接收的快慢无关……
Socket中send recv 问题
刚学socket编程,现在碰到个<em>问题</em>。rn我现在在编一个C/S程序rn当server accept connection rn即new_fd=accept(sockfd,(struct sockaddr *)&their_addr,(socklen_t *)&sin_size);rn我想发2条不同的message给client,分别赋给不同的数组,比如rn<em>send</em>_status=<em>send</em>(new_fd,"abc",3,0);rn<em>send</em>_status=<em>send</em>(new_fd,"12345",5,0);rn可是当client接受的时候,第一次就把所有的"abc12345"给接受走了。rn请问有什么办法使它接受“abc"后赋给一个数组rn然后接受“12345”赋给另外个数组。rn谢谢!
EasyHook库的使用
导语### EasyHook的官网,最近在做的项目中,因为要去过滤掉cmd的弹框,所以用到了这个库, 在使用的过程中,遇到了一些坑,然后也解决了一些<em>问题</em>,特再次记录下来,方便自己以后查阅 1.了解#### 首先我查找了网上的相关资料,都查的有点晕了,但有用的就那么几个,其它的就是引用这个几个例子,这样感觉效率不高,后面我还是先参照了官网的例子,才觉得真正对easy<em>hook</em>有了一个全面的了...
EasyHook库系列使用教程之三插入钩子示例
此篇介绍重点:通过一个实例来介绍如何API HOOK。 实体准备:通过HookToolTest程序,将HookTool注入到记事本中,并钩取记事本的CreateFileA和CreateFileW<em>函数</em>。钩子<em>函数</em>的功能仅记录打开的文件。 原代码下载地址,包括了整个EasyHook的代码和例子代码。 http://download.csdn.net/detail/yuzeh
ws2_32.dll的用途
百度百科上的,试过用来杀瑞星,除了mcafee的规则外,几乎通杀~<em>ws2_32.dll</em>ws2_32 - <em>ws2_32.dll</em> - DLL文件信息 DLL 文件: ws2_32 或者 <em>ws2_32.dll</em>DLL 名称: WinSock 2.0 32bit描述: <em>ws2_32.dll</em>是Windows Sockets应用程序接口,用于支持Internet和网络应用程序。 属于: Windows Sockets 系统 DLL文件: 是常见错误: File Not Found, Missing File, Excep
如何获取ws2_32.dll函数输出序号表
我想要替换掉<em>ws2_32.dll</em>的一些功能<em>函数</em> 自己做些处理然后再调用原来的<em>函数</em>继续完成操作 比如接受和发送数据包 我先对数据包进行处理 再调用原来的<em>send</em> 和<em>recv</em> 来发送和接收 我自己写一个w
关于API HOOK拦截封包原理
作者:不详  来源于:TTee.com 外挂网http://soft.ttee.com/Article/Catalog32/95.html我自己做的api<em>hook</em>,是用了陷阱式和导入表式封装在同一个类里的。源代码还没整理,而且是用delphi编写的。本人最近忙其他一个程序,加上工作忙,所以现找来网上的一篇<em>关于</em>api<em>hook</em>的文章。 本论坛很多朋友是用C++的,所以转贴了一篇C++的,原理写的蛮清楚
求madCodeHook Hook Send和Recv的例子
实现类似封包助手的功能rn求用madCodeHook Hook Send和Recv的例子rn
socket中sendrecv
除了发送0个字节外,<em>send</em>什么时候返回值为0啊,好像都碰不到这种情况。rn<em>recv</em>在udp时,是不是不会出现返回值为0这种情况啊》
send recv函数 错误处理问题
对<em>send</em>和<em>recv</em>的返回值应该怎么处理?rn严谨一点的方法,我想了一天,没有想到,求指点rn是否要对WSAGetLastError()得到的错误码中比较重要的几个做单独处理?
sendrecv函数是不是一一对应的?
<em>send</em>和<em>recv</em><em>函数</em>是不是一一对应的?rn也就是说在一端有一个<em>send</em>,在另一端就有且仅有一个<em>recv</em>与之对应,而不会出现一个<em>send</em>对应多个<em>recv</em>,或者一个<em>recv</em>对应多个<em>send</em>??rn
关于HOOK RECV
我HOOK了IE的RECV<em>函数</em>....步骤如下rn1.::GetProcAddress(::GetModuleHandle(L"ws2_32"),"<em>recv</em>");取得<em>recv</em>的地址rn2.修改这个地址对应的指令为jmp xxx这个xxx是我的<em>函数</em>的地址rn3.xxx里的代码如下rn _asmrn rnrn pushadrn push [esp+0x30] ;flagsrn push [esp+0x30] ;bufsizern push [esp+0x30] ;bufferrn push [esp+0x30] ;Socket rn call RecvDatarn mov ea,eax ;这个ea是我在外部定义的一个int变量rn popadrn mov eax,earn retn 0x10rnrn rnrn4.下面是RecvData<em>函数</em>代码rnCString str;rnDWORD dwNumberOfBytesWrite;rnDWORD dwNumberOfBytesRead;rn::WriteProcessMemory(::GetCurrentProcess(),p1,buf1,5,&dwNumberOfBytesWrite);//恢复原始代码rnint ret=::<em>recv</em>(s,buf,len,flags);rn if(ret==-1) //<em>问题</em>貌似出现在这里.如果我把这个if全部删掉IE能正常访问.但是如果我就rn //这样留着就会出<em>问题</em>访问任何网站直接弹出接收失败,错误代码100053rn //请高手讲解一下rn rn str.Format(L"接收失败,错误代码%d",::GetLastError()); rn MessageBox(NULL,str,L"",0);rn rn::WriteProcessMemory(::GetCurrentProcess(),p1,NewAddress,5,&dwNumberOfBytesWrite);//改回继续HOOK代码rnreturn ret;
谁有ws2_32.dll的那个函数hook文件?
就像以前那个 wsock.dll 那样的源文件。。。 我想搞封包分析。。
用 Hook API 技术替换 ws2_32.dll 和 wsock32.dll 中的 sendrecv、 wsasend、wsa recv 函数实现抓包,遇到问题,望高手指教
我的目的是想抓获所有通过 IE 收发的数据包,对此进行分析,可以考虑采用的技术有: 1、Hook API ,就是现在用的; 2、SPI , 这个没试过; 3、Mime Filter, 这个了解了相关技
征求可以收到recv(),send()等函数的HOOK源代码
希望同您探讨rn分不是<em>问题</em>
sendrecv
服务器端用<em>send</em>发送数据后,客户端怎样知道数据已发过来,<em>send</em>发送到客户端有触发信号吗,若调用timer事件一直检测,就会有阻塞现象。
winsock中的send()recv()函数使用的一些问题
[code=C/C++]rnint <em>send</em>( SOCKET s, const char FAR *buf, int len, int flags );rn[/code]rnrn(1)参数buf是否一定是以'\0'结尾的? 如果不是的话,<em>函数</em>如何判断buf是否全部拷贝进s的缓冲区?rnrn(2)如果buf是以'\0'结尾的字符串,最后的'\0'是不是也进入了socket的"消息体"呢? 可能这个消息体用的不是很恰当;rnrn(3)<em>关于</em>参数len, 我看孙鑫的那本里的例子:rn <em>send</em>(sockClient, "this is lizi" ,strlen("this is lizi")+1 ,0);rn 这里的len=strlen()+1, 是不是也吧\0这个结束符放进了消息体?rnrn[code=C/C++]rnint <em>recv</em>( SOCKET s, char FAR *buf, int len, int flags ); rn[/code] rn(1)<em>recv</em>的使用前先为buf申请足够的空间,比如这里char buffer[100],但是这样调用<em>recv</em>(sock,buffer,200,0)或者len是小于100的数,这样会出现什么情况?rn(2)如果如下的代码:rnchar buffer[100];rn<em>recv</em>(sock,buffer,100,0);rn如何才能用buffer[]数组的下标操作receive的字节,(可能这里没描述清楚,比如实际收到了abcdef六个字节,那么buffer[6]~buffer[99]中不是有效数据,如何才能避免访问到buffer[6]之后的元素呢?)rn
send recv
客户端:rn#include rn#include rnrn#include rn#include rnrn#include rn#include rn#include rn#include rn#include rn#define SERVER_IP "127.0.0.1"rn#define SERVER_PORT 12000rnrnrnint main()rnrn int sockfd;rn sockfd = socket( AF_INET,SOCK_STREAM,0 );rn if( sockfd< 0 )rn rn perror( "socket create error" );rn rn rn struct sockaddr_in addr;rn addr.sin_family = AF_INET;rn addr.sin_port = htons( SERVER_PORT );rn addr.sin_addr.s_addr = inet_addr( SERVER_IP );rn rn int size;rn bzero(&(addr.sin_zero),8);rn size = sizeof(struct sockaddr);rn if( connect( sockfd,(struct sockaddr *)&addr,size )< 0 )rn rn perror( "connect error" );rn rn rn char buf[] = "hello world";rn rn int len;rn int <em>send</em>_byte;rn len = sizeof( buf );rn rn int sum = 10;rn while( sum--)rn rn <em>send</em>_byte = <em>send</em> ( sockfd,buf,len,0);rn sleep( 10 );rn rnrn printf ( "tcpc <em>send</em> byte:%d",<em>send</em>_byte );rn close( sockfd );rn return 0;rnrnrn服务器:rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define SERVER_PORT 12000rnint main()rnrn int sockfd;rn sockfd = socket(AF_INET,SOCK_STREAM,0);rnrn if(sockfd == -1)rn rn perror("socket create error");rn exit( 1 );rn rnrn rn struct sockaddr_in addr;rn addr.sin_family = AF_INET;rn addr.sin_port = htons( SERVER_PORT );rn addr.sin_addr.s_addr = INADDR_ANY;rn int check;rn bzero(&(addr.sin_zero),8);rnrn if( bind( sockfd,(struct sockaddr *)&addr,sizeof( struct sockaddr )) == -1 )rn rn perror(" socket bind error ");rn printf( "%d",check );rn exit( 1 );rn rn if( listen(sockfd, 3) == -1 )rn rn perror( "listen error" );rn exit( 1 );rn rn struct sockaddr_in remote;rn int len;rn len = sizeof(struct sockaddr_in);rn int clientfd;rn if( clientfd = accept(sockfd,(struct sockaddr *)&remote,&len ) == -1)rn rn perror( "accept error" );rn exit( 1 );rn rn char buf[12];rnrn int sum = 0;rn while( sum != -1)rn rn sum = <em>recv</em>( clientfd,buf,sizeof(buf),0 );rn if( sum == -1 ) perror( "<em>recv</em> error\n" );rn rn printf( "tcps <em>recv</em>:%s\n",buf);rn printf( "the <em>recv</em> byte:%d\n",sum);rn close( clientfd );rn rn return 0;rnrn运行效果:rn[wjh@root wjh]$ ./s &rn[1] 23986rn[wjh@root wjh]$ ./crn<em>recv</em> errorrn: Socket operation on non-socketrntcps <em>recv</em>:rnthe <em>recv</em> byte:-1rn光标在这里停rnrn为什么<em>recv</em>就不了数据?rn我是SecureCRT 5.0里面编写,运行的。
send recv 问题
请问如果我开多个线程在某个SOCK 上手发数据, 如果某一线程在收或者发送的数据中, 该线程被挂起。 那么会出现什么情况呢? 请高手赐教
recv/send问题
对同一个套接字<em>send</em>数据成功,<em>recv</em>返回10035错误,这个怎么解决?
winsock sendrecv问题
我写了一个 Tcp的程序rnrn服务端有两个<em>send</em><em>函数</em>,每次发送两个数据到 Socket1 和 Socket2分别对应的客服端去。rnrn...rn<em>send</em> ( Socket1, buf, size, 0 );rn<em>send</em> ( Socket2, buf, size, 0 );rn...rnrn客户端接收的代码rnrn...rn<em>recv</em> ( ServerSocket, ( char* ) Zi, sizeof ( ZoneInfo ), 0 );rn<em>recv</em> ( ServerSocket, ( char* ) ( Zi + 1 ), sizeof ( ZoneInfo ), 0 );rn...rnrn注:sizeof ( ZoneInfo )= 804rnrn现在的<em>问题</em>是在多次运行 两个<em>send</em><em>函数</em>以后,开始几次(次数不定)客服端接受正常,但后面几次<em>send</em>就会发生阻塞,客服端接受不到数据,不知道这个是什么原因。rnrn多谢各位的解答
奇怪的send(),recv()问题
我的任务是在实现邮件的收发,因为是一个全新的嵌入式平台系统,(富士通的专用rn操作系统),所以只能在windows上通过标准的BSD Socket APIs实现,便于移植。rn在邮件的发送中,需要不断的写固定格式的内容,如:rn“From: test@192.168.1.1\r\n”,"Content-Type: text/plain\r\n"rn等。我所有的向网络发送数据包的过程都封装在mail_stream_<em>send</em>()中。rn但是当我连续调用它的时候,会导致失败,10054。rnrnlong mail_stream_<em>send</em>(SOCKET sk, char *pSrc, int len)rnrn long nSend;rn if ((nSend = <em>send</em>(sk,pSrc,len,0)) == SOCKET_ERROR)rn rn printf("<em>send</em>() failed!\r\n");rn return -1;rn rn if (nSend < len)rn rn printf("Data is too much!\r\n");rn return -1;rn rn //Sleep(10); //注意,这是<em>问题</em>所在。rn return nSend;rnrnrn当我在没有Sleep的时候,在连续调用了多次之后,(但总共的数据绝对不超过2k,rn而且根据协议,每次发送的数据不超过500个字符,已用base64编码,pSrc中不含值为0的数据)随后的<em>recv</em>()<em>函数</em>获取服务器返回会出错,用WSAGetLastError()得到的错误代码为10054;奇怪的是我用F5开始Debug的时候能通过,正常,但一运行就不行。而且它从来没有提示过“Data is too much!”,然后我在这个<em>函数</em>中加上了Sleep(10)就一切正常了。但这样的代码不能用于产品的。请问到底是那里有<em>问题</em>了?rn
sendrecv的返回值问题!
一直以来我认为,<em>send</em> 和<em>recv</em>在失败的时候返回值小余0rnrn当返回值大于等于0的时候要进行循环接收rnrn可是今天碰见了,当套接字被设置成非阻塞模式的时候,如果套接字被关闭,<em>recv</em>的返回值是0rnrn很是头痛rnrn到底这两个<em>函数</em>返回0的时候要不要做出错处理rnrn哪位大哥对这个比较熟悉,请不吝赐教
网络编程sendrecv问题
在linux下,按照网上的资源,编写了client和server<em>函数</em>。想在client端不停地输入字符串,rn然后在server端打印出来。rn出现的<em>问题</em>是,先启动server端,启动client之后,server迅速就关闭了。。。rnrnserver代码:rn[code=c]rn/*rn server1.c rn 2013-7-24rn */rnrn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define BUFFER_SIZE 1024rn#define SERVPORT 3333rnrnint main()rnrn char buffer[BUFFER_SIZE];rnrn //********** create socket ******************rn int sockfd;rn struct sockaddr_in serv;rn struct sockaddr_in client;rn sockfd=socket(AF_INET,SOCK_STREAM,0);rn perror("socket");rn printf("errno %d\n",errno);rn // printf("sockfd %d\n",sockfd);rn if( sockfd < 0 )rn rn return 0;rn rnrn //************* bind **********************rn bzero(&serv,sizeof(serv));rn serv.sin_family = AF_INET;rn serv.sin_port = htons(SERVPORT);rn serv.sin_addr.s_addr = INADDR_ANY;rn int bindFlag;rn bindFlag = bind(sockfd,(struct sockaddr*)&serv,sizeof(struct sockaddr));rn perror("bind");rn printf("errno %d\n",errno);rn // printf("sockfd %d inetFlag %d\n",sockfd,inetFlag);rn if( bindFlag < 0)rn rn return 0;rn rnrn //************** listen *********************rn int listenFlag;rn int backlog = 5;rn listenFlag = listen(sockfd,backlog);rn perror("listen");rn if( listenFlag < 0) rn rn return 0;rn rnrn //************** accept ********************rn socklen_t addr_len = sizeof(sockaddr_in);rn int acceptFlag;rn acceptFlag = accept(sockfd,(struct sockaddr*)&client,&addr_len);rn perror("accept");rn if( acceptFlag< 0 )rn rn printf("Create Socket Error.\n");rn return 0;rn rnrn bzero(&dest,sizeof(dest));rn dest.sin_family = AF_INET;rn dest.sin_port = htons(3333);rn int inetFlag;rn //inetFlag = inet_aton("192.168.123.5",(struct rnin_addr*)&dest.sin_addr.s_addr);rn inetFlag = inet_aton("127.0.0.1",(struct in_addr*)&dest.sin_addr.s_addr);rn perror("inet_aton");rn printf("errno %d\n",errno);rn // printf("sockfd %d inetFlag %d\n",sockfd,inetFlag);rn if( inetFlag == 0)rn rn printf("set error.\n");rn return 0;rn rnrn //************** connect *********************rn int connectFlag;rn connectFlag = connect(sockfd, (struct sockaddr *) &dest, sizeof(dest));rn perror("connect");rn printf("errno %d\n",errno);rn // int errFlag = GetLastError();rn // printf("sockfd %d connectFlag %d\n",sockfd,connectFlag);rn if( connectFlag < 0) rn rn //printf("sockfd = %d\n",sockfd);rn //printf("Connect error.\n");rn return 0;rn rnrn //************** <em>send</em> ***********************rn while(1)rn rn printf("输入一个字符串:");rn scanf("%s",buffer);rn int ret = <em>send</em>(sockfd,buffer,strlen(buffer),0);rn if(ret==0 || ret==-1)rn rn printf("server closed");rn return 0;rn rn rn system("pause");rn return 0;rnrn[/code]rn-----------------------------------------------------------------rn编译:rn g++ -o c1 client1.crn g++ -o s1 server1.crnrn打开两个终端,其中一个执行服务器程序:rn ./s1rn立即打印:rn socket:Successrn errno:0rn bind:Successrn errno:0rn listen:Successrn然后就停住了。rnrn这时在另外一个终端上执行客户端程序:rn ./c1rn立即打印:rn socket:Successrn errno:0rn inet_aton:Successrn errno:0rn connect:Successrn errno:0rn 输入一个字符串:rn同时服务器端打印2行:rn accept:Successrn client closedrn并立即退出。rnrn我是想让服务器端阻塞,然后客户端输一行,服务器端显示一行。rn这个错误在哪儿?
关于hook send api的问题
我能<em>hook</em>到了发送的socket的句柄,然后通过getsockname(s,(sockaddr *)&sockname,&namelen);把IP提取出来,但是如何才能更改这个socket句柄关联的IP呢?
求助|关于HOOK SEND的问题
这几天在网上找了好多封包捕获的资料和源码rn碰到一些<em>问题</em>rn我要捕获的目标程序,用WPE获得的发送包都是<em>send</em>,而不是wsa<em>send</em>rn在DELPHI中用了rn<em>hook</em>api('<em>ws2_32.dll</em>',wsa<em>send</em>,@xxxx,xxxx)来HOOK,rn不能捕获封包rn而另一个通过修改API地址的例子中,源程序是有封包通过的时候响铃一声,不加任何东西的时候运行没有<em>问题</em>,封包经过时也会响铃,但是加进去自己的代码以后,马上就会出错,我用的代码只是把buf中的字符读取到字符数组中。rn而且这个程序我试了好多次没办法加进去热键呼出窗口。(是否可以)?rn而用<em>hook</em>api的例子中,wsa<em>recv</em>可是得到进来的封包。如果要HOOKAPI <em>send</em>,请问如何实现?rn请附上源码,谢谢。rn我一会把这两个例子的源码部分弄上来!
sendrecv问题
我在socket中采用非阻塞的方式来调用<em>send</em>和<em>recv</em>来进行rn发送和接收,我现在要将一个为2M大小的文件利用<em>send</em>发送和<em>recv</em>在rn网络上传输,但是在非阻塞调用<em>send</em>的时候<em>函数</em>会立即返回,这样我如果想rn发送这么大的一个文件肯定一次不可能完成,第一次调用<em>send</em>的时候<em>函数</em>rn会返回一个已经发送的字节数,然后我再怎么办可以达到我的目的呢?rnrn还有就是我如果是采用阻塞的<em>send</em>和<em>recv</em>这样的,TCP/IP协议是不是它rn会自动完成缓冲区的<em>问题</em>。不知道是否这样!
recvsend的线程同步问题????
我的程序要实现:它本身相对于不同的两端分别作为客户机和服务器。rn作为服务器时,从另一端接收数据,然后再把接收到的数据发送到它的服务器(第三端),此时它自己是客户机,然后等待服务器的处理结果,最后把从服务器接收到的数据再发给它的客户机,用receive和<em>send</em>,但是我现在遇到的<em>问题</em>是::如何才能区分数据是从哪里接收的及要发送给谁的呢,如果用同步,本人实现起来又困难重重,请问高手能否指点一二,谢谢,非常感谢!!
jsf,spring酒店预定管理系统下载
jsf,spring酒店预定管理系统jsf,spring酒店预定管理系统jsf,spring酒店预定管理系统 相关下载链接:[url=//download.csdn.net/download/li298084865/2466449?utm_source=bbsseo]//download.csdn.net/download/li298084865/2466449?utm_source=bbsseo[/url]
示波器使用几点详细教程下载
资料内部包含两部分试用期实用,文档比较全面,详细。 相关下载链接:[url=//download.csdn.net/download/KOUTENGQIANG/3121822?utm_source=bbsseo]//download.csdn.net/download/KOUTENGQIANG/3121822?utm_source=bbsseo[/url]
scjp/ocjp资料下载
scjp资料.zipscjp资料.zips 相关下载链接:[url=//download.csdn.net/download/wujingjingjing0/4860851?utm_source=bbsseo]//download.csdn.net/download/wujingjingjing0/4860851?utm_source=bbsseo[/url]
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法
我们是很有底线的