SynScan --www.iamaphex.net[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

r/>  TcpHeaderLen: word;
  ChecksumSize: word;
  DataPointer: ^byte;
  procedure IncPtr(Value: integer);
  begin
    DataPointer := pointer(integer(DataPointer) + Value);
  end;
begin
  Size := sizeof(ipHdr) + sizeof(tcpHdr);
  ipHdr.ip_verlen := ((4 shl 4) or sizeof(ipHdr) div sizeof(longword));
  ipHdr.ip_tos := 0;
  ipHdr.ip_len := htons(Size);
  ipHdr.ip_id := 0;
  ipHdr.ip_offset := 0;
  ipHdr.ip_ttl := 128;
  ipHdr.ip_protocol := 6;
  ipHdr.ip_checksum := 0;
  ipHdr.ip_saddr := FromIP;
  ipHdr.ip_daddr := ToIP;
  ChecksumSize := 0;
  tcpHdr.th_sport := htons(FromPort);
  tcpHdr.th_dport := htons(ToPort);
  tcpHdr.th_seq := htons(Seq);
  tcpHdr.th_ack := 0;
  tcpHdr.th_len := 80;
  tcpHdr.th_flags := 2;
  tcpHdr.th_win := htons(65535);
  tcpHdr.th_checksum := 0;
  tcpHdr.th_upr := 0;
  DataPointer := @Buffer[0];
  FillChar(Buffer, SizeOf(Buffer), 0);
  Move(ipHdr.ip_saddr, DataPointer^, SizeOf(ipHdr.ip_saddr));
  IncPtr(SizeOf(ipHdr.ip_saddr));
  ChecksumSize := ChecksumSize + sizeof(ipHdr.ip_saddr);
  Move(ipHdr.ip_daddr, DataPointer^, sizeof(ipHdr.ip_daddr));
  IncPtr(SizeOf(ipHdr.ip_daddr));
  ChecksumSize := ChecksumSize + sizeof(ipHdr.ip_daddr);
  IncPtr(1);
  Inc(ChecksumSize);
  Move(ipHdr.ip_protocol, DataPointer^, sizeof(ipHdr.ip_protocol));
  IncPtr(sizeof(ipHdr.ip_protocol));
  ChecksumSize := ChecksumSize + sizeof(ipHdr.ip_protocol);
  TcpHeaderLen := htons(sizeof(tcpHdr));
  Move(TcpHeaderLen, DataPointer^, sizeof(TcpHeaderLen));
  IncPtr(sizeof(TcpHeaderLen));
  ChecksumSize := ChecksumSize + sizeof(TcpHeaderLen);
  Move(tcpHdr, DataPointer^, sizeof(tcpHdr));
  IncPtr(sizeof(tcpHdr));
  ChecksumSize := ChecksumSize + sizeof(tcpHdr);
  tcpHdr.th_checksum := CheckSum(Buffer, ChecksumSize);
  FillChar(Buffer, sizeof(Buffer), 0);
  DataPointer := @Buffer[0];
  Move(ipHdr, DataPointer^, sizeof(ipHdr));
  IncPtr(sizeof(ipHdr));
  Move(tcpHdr, DataPointer^, sizeof(tcpHdr));
  Socket.sin_family := 2;
  Socket.sin_port := htons(0);
  Socket.sin_addr.S_addr := ToIP;
end;

procedure Send(TargetIP: dword; TargetPort: integer; SourceIP: dword; SourcePort: integer; Sequence: longint);
var
  Buffer: TBufferArray;
  Sck: TSockAddr;
  Size: Word;
begin
  Header(SourceIP, SourcePort, TargetIP, TargetPort, Sequence, Buffer, Sck, Size);
  while SendTo(hSocket, Buffer, Size, 0, Sck, sizeof(Sck)) = -1 do Sleep(1);
end;

function GetInAddr: TInAddr;
var
  Host: array[0..128] of char;
  HostEnt: PHostEnt;
begin
  GetHostName(@Host, 128);
  HostEnt := GetHostByName(@Host);
  Result := PInAddr(HostEnt^.h_addr_list^)^
end;

procedure Init;
var
  WSAdata: TWSAdata;
  SockAddrIn: TSockAddrIn;
  Option: integer;
  Control, BytesReceived: longint;
begin
  WSAStartup($0002, WSAdata);
  hSocket := Socket(2, 3, 0);
  Option := 1;
  SetSockOpt(hSocket, 0, 2, @Option, SizeOf(Option));
  bSocket := Socket(2, 3, 0);
  SockAddrIn.sin_family := 2;
  SockAddrIn.sin_addr := GetInAddr;
  SockAddrIn.sin_port := htons(0);
  bind(bSocket, @SockAddrIn, SizeOf(SockAddrIn));
  WSAIoctl(bSocket, IOC_IN or $18000000 or 1, @Control, SizeOf(Control), nil, 0, @BytesReceived, nil, nil);
end;

procedure ReceiveResults;
var
  Data: array [0..39] of char;
  BytesReceived: longint;
  IPHeader: iph;
  TCPHeader: tcph;
  Result: string;
  BytesWritten: Cardinal;
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
begin
   while True do
   begin
     BytesReceived := recv(bSocket, Data, 40, 0);
     if BytesReceived = 40 then
     begin
       IPHeader := iph(pointer(@Data)^);
       TCPHeader :=

本文关键:SynScan --www.iamaphex.net
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top