setsockopt 语句为何总出错!(100分)

  • 主题发起人 主题发起人 tianhf
  • 开始时间 开始时间
T

tianhf

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
wsd:TWSAData;
s:TSocket;
bOpt:ByteBool;
remote:SockAddr_in;
iphdr:IP_HDR;
udpHdr:UDP_HDR;
i,ret:integer;
iTotalSize,iUdpSize,iudpCheckSumSize,iIpVersion,iIpSize,ckSum:longWord;
ptr:PChar;
begin
if WSAStartup($202,wsd)<>0 then
begin
edit1.Text:='WSAStartup failed!';
exit;
end;

s:=WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,0,0,0);
if s=INVALID_SOCKET then
begin
edit1.Text:='WSASocket failed!';
exit;
end;

bOpt:=true;
ret:=setsockopt(s,IPPROTO_IP,IP_HDRINCL,PChar(@bOpt),1);
^^^^^
if ret=Socket_Error then
begin
edit1.Text:='IP_HDRINCL failed! '+intToStr(WSAGetLastError());
exit;
end;
.........
上行返回的错误码 10022!!!!!!!!!!!!!!!
 
我知道你是想做一个攻击程序?
1、IP_HDRINCL只对socket的protocol为 IPPROTO_RAW 或者 0 有效
2、IPPROTO_RAW在win2000下有效,win9x肯定不支持,winnt4听说不支持
3、如果是c++builder,必须加ws2_32.lib进去project才能正常运行,否则能编译能运行
但是不正常工作。 delphi没试过。
 
我用的系统是 windows2000,上面的程序错在哪里?谢谢!!!
 
明天晚上告诉你
 
先说一点,bOpt应该为 4位的 bool ,不是一位的bool,
用整数也行,但是长度(最后一个参数)必须为4
 
嘿嘿,过去了!!!
谢谢 pipi.,问题结束!
 
后退
顶部