文章列表
 
您正在查看 "socket编程" 分类下的文章

2007年03月19日 星期一 下午 1:00
1、读取当前错误值:每次发生错误时,如果要对具体问题进行处理,那么就应该调用这个函数取得错误代码。
        int    WSAGetLastError(void );
        #define h_errno     WSAGetLastError()
错误值请自己阅读Winsock2
 
2007年03月19日 星期一 下午 12:56

一、简单的TCP服务器


介绍

WinSock API是一套供Microsoft Windows操作系统使用的套接字程序库,它最初基于Berkeley套接

字,但是其中加入了一些Microsoft的特殊改动。在这篇文章中,我要试着给你介绍如何使用

WinSock来进行套接字程序设计,并假设你没有在任何操作系统上进行过网络编程的经验。
如果你只有一台单独的机器,那么不用着急,你仍然可以进行WinSock程序设计。你可以使用名为

localhost的本地回环地址,它的IP地址是127.0.0.1。这样一来,如果你在机器上运行了一个TCP

 
2007年03月19日 星期一 下午 12:32
从网上查到一篇“拦截其它程序的网络数据封包”的文章,我想问问前辈们,我应该怎么获取此程序连接的ip地址呢?我是希望能根据ip地址判断是不是需要拦截。

HOOK.DLL的代码:
library Hook;

uses
SysUtils,
windows,
Messages,
APIHook in 'APIHook.pas';

type
PData = ^TData;
TData = record
Hook: THandle;
Hooked: Boolean;
end;

var
DLLData: PData;

{------------------------------------}
{过程名:HookProc
{过程功能:HOOK过
 
2007年02月28日 星期三 下午 3:28
http://www.xfocus.net/articles/200611/895.html

创建时间:2006-11-23
文章属性:原创
文章提交:swords (songbohr_at_163.com)

项目名称:智慧小子SmartKid

有了成果要公开, 不要舍不得,不然很快会过时的。。。:)
ICMP部分包构造感觉有问题,希望能得到反馈意见。

下载地址:
 
2007年01月21日 星期日 下午 8:09

by shadow3 

前段时间在研究TDI和NDIS,发现在WINDOWS下复用端口并非很麻烦的事情,如果你对TDI CLIENT比较熟悉的话,会发现这其实很容易,之前有很多种方法都可以复用端口,但是都会有或多或少的一些问题,例如hook winsock函数,他需要把每个进程里的函数都hook,才能保证可以复用端口,而且这种方法对于win2k3的IIS6不通用,因为iis6有内核驱动http.sys来处理连接管理和数据接收等,当然后来还有NDIS上的hook,用他来接受所

 
2006年11月23日 星期四 下午 1:39

来源:Delphi K.Top

利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平,应此以下为同步方式编程要点。

1、快速通信

  Winsock的Nagle算法将降低小数据报的发送速度,而系统默认是使用Nagle算法,使用

int setsockopt(

SOCKET s,

int level,

int optname,

const char FAR *optval,

int optlen

);

函数关闭它

  例子:

SOCKET sConnect;

sConnect=:ocket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

int bNodelay = 1;

int err;

err = setsockopt(

sConnect,

IPPROTO_TCP,

TCP_NODELAY,

(char *)&bNodelay,

sizoeof(bNodelay));//不采用延时算法

if (err != NO_ERROR)

TRACE ("setsockopt failed for some reasonn");;

  2、SOCKET的SegMentSi

 
2006年11月21日 星期二 下午 5:38
http://www.syue.com/Article/hkjj/DDOS/200611/7988.html
在TCP三次握手后插入伪造的TCP包 一、说明 用Socket的API Connect完成TCP建立连接的三次握手,同时子进程抓包,抓完三次握手的包后,插入第四个包即可,从对端返回的第五个包来看插入成功了,但因为插入了一个TCP包,之后的连接将发生混乱。可以将插入的那个包Data设置为HTTP Request,向WEB服务器提交请求。又如果目标系统的TCP序列号是可预计算的,那么是否可以做带伪源地址的Blind TCP three-time handshakes和插入,值得试验! 作者所做的实验其实什么也说明不了,只是验证了一下TCP协议序号和检验和计算函数而已。我想作者八成是受了CC攻击原理的启发,想不通过代理的
 
2006年11月21日 星期二 下午 3:04
unit ServerDlg;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, WinSock, ScktComp, Menus, TrayIcon, FormSettings,
RemConMessages, ZLib, MsgSimulator, ComCtrls, ShellAPI;

type
TServerForm = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
LogList: TListBox;
ServerPanel: TPanel;
Label5: TLabel;
StartLab: TLabel;
Label9: TLabel;
ConLab: TLabel;
Label11: TLabel;
NumRecLab: TLabel;
Label13: TLabel;
NumSendLab: TLabel;
Label3: TLabel;
LastRecLab: TLabel;
Label4: TLabel;
NumErrLab: TLabel;
Panel1: TPanel;
Label1: TLabel;
NameLabel: TLabel;
Label2: TLabel;
PortEdit: TEdit;
Panel2: TPanel;
StartBut: TButton;
DisconBut: TButton;
MinimizeBut: TButton;
Clien
 
2006年11月21日 星期二 下午 3:04
评价一匹木马的优略,除了功能的多少外,还有一点是必须具备的,那就是必须要小巧。只有小巧才能以最快的手段来种植,只有小巧才能更好的隐藏和捆绑。入侵过程中,有时候机会稍纵即逝,为了在很短的时间内种植后门,就必须使用小巧的木马来当先行者。现在的黑客入侵越来越注重木马的大小。只有那些刚刚接触木马的新手才会使用体型庞大的后门程序。
我一直在想,使用delphi到底能写出多小的木马程序来?这个问题其实困绕了我很长一段时间。虽然Delphi是个很有效率的开发工具,但是它有一个缺点就是生成的EXE文件太大。一个程序就算只有一个空窗口体积也有286KB。怎么样才能把它变小呢?在经过多方面的查找资料和学习,功夫不负有心人。我终于写出来一个56K的小木马“InclinedRoad”(使用了UPX压缩),它的功能非常简单,只有上传和运行EXE程序的功能,不过这样已经足够当木马程序用了。

其实也没有使用什么高深的技术,只是利用了WinSock API 来进行Socket编程,这些都是别人用剩下的东西,我之所以提一下,只是因为这方面编写木马的资料比较少。Delphi中各种网络组件的强大功能,都是建立在WinSock API基础之上的。具
 
2006年11月21日 星期二 下午 2:54
1.ServerSocket的控件属性

threadcachsize:创建服务器线程的最在数目。
port:确定服务器的监视端口。
service:客户通过此属性来识别服务器端口。

2.ClientSocket的控件属性

Socket:此属性参数是应用程序之间通信的端点。
Address:此属性参数为字符串类型,客户端确定服务器端的IP地址。
Host:服务器端的主机名称。
Post:服务器端的监视端口。
Servce:用来识别服务器端口。
Active:确定Socket是否可用(true表示可用)。
ClientType:指定客户机采用哪一种方式(异步/同步)来通信。


1.ServerSocket的事件
onclientconnect:客户与服务器连接且服务器接收申请后,产生此事件。
onclientdisconnect:当和服务器连接的某一个客户机关闭连接后产生此事件。
onGetSocket:一个服务器可以接收多个客户Socket的连接申请。
onGetThread:当ClientType属性值设为StrThreadBlocking时,服务器会产生一个单独的线程来与客户的连接

onAccept:服务器接收客户的连接申请后,产生此事件。
o
 
2006年11月21日 星期二 下午 2:53
你可以用,DELPHI7的INDY这组控件。
采用的是TCP协议,支持多线程,而且也可以监控流量。
如果你用得是DELPHI6,那么可以去http://www.nevrona.com/indy/下载一个。
下面是我写的部分代码:

SERVER

procedure TFrmUpdate.StartServerClick(Sender: TObject);
begin
 with TCPServer do
 begin
  Active := False;
  DefaultPort := StrToInt(EdPort.Text);
  Active := True;
  LogMemo.Lines.Add(DateTimeToStr(Now)+' 服务已经启动!(Port: '+EdPort.Text+')');
 end;
end;

procedure TFrmUpdate.StopServerClick(Sender: TObject);
begin
 with TCPServer do
 begin
  Active := False;
  LogMemo.Lines.Add(DateTimeToStr(Now)+' 服务已经停止!');
 end;
end;

procedure TFrmUpdate.TCPServerExecute(AThread: TIdPeerThread);
var
 FileStream: TFileStream;
 
2006年11月21日 星期二 下午 2:53
实际工作中的代码,向服务器发送特定格式命令后,取得想要的工艺位号数据。
直接复制过来的,有兴趣的自己看吧。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,winsock, StdCtrls, ExtCtrls, DB, ADODB;

type
TForm1 = class(TForm)
  edtHostIP: TEdit;
  edtHostPort: TEdit;
  btnSend: TButton;
  lstTags: TListBox;
  Timer1: TTimer;
  lblMsg: TLabel;
  conn: TADOConnection;
  cmd: TADOCommand;
  lstSTag: TListBox;
  lstTagValue: TListBox;
  lstRecv: TListBox;
  procedure FormCreate(Sender: TObject);

  procedure ConnectHost;
  procedure GetData(myStr:string);

  procedure msg(myStr:string);
  procedure FormDestroy(Sender: TObject);
  pro
 
2006年11月21日 星期二 下午 2:52
//GetTcpTable函数单元
unit untIPHLPAPI;

interface

uses
Windows, sysutils, WinSock;

type
EIpHlpError = class(Exception);
//----------------TCP结构------------------------------------------------
PTMibTCPRow = ^TMibTCPRow;
TMibTCPRow = packed record
  dwState   : DWORD;//状态
  dwLocalAddr : DWORD;//本地IP地址
  dwLocalPort : DWORD;//本地端口号
  dwRemoteAddr: DWORD;//远程IP地址
  dwRemotePort: DWORD;//远程端口号
end;
//
PTMibTCPTable = ^TMibTCPTable;
TMibTCPTable   = packed record
  dwNumEntries : DWORD; //Tcp打开的数量
  Table     : array[0..0] of TMibTCPRow;
end;

//------------------从IPHLPAPI.DLL输入的API函数----------------------------
function GetTcpTable(pTcpTable: PTMibTCPTable; var pdwSize: DWORD;
bOrder: BOOL): DWORD; stdcall;
 
2006年11月21日 星期二 下午 2:52
在编制Winsocket程序的时候,要有一些必要的步骤:

1、初始化Winsock动态连接库;

2、建立一个Winsock对象。

3、连接主机。

4、和主机进行数据交流。

5、关闭Socket对象

6、释放Winsoket动态链接库。

下面是一个使用winsock Api实现finger实现的源程序:在delphi6中调试通过。

unit finger;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winsock, StdCtrls;

type
TForm1 = class(TForm)
  Label1: TLabel;
  Label2: TLabel;
  edtHost: TEdit;
  btnFinger: TButton;
  edtUser: TEdit;
  memInfo: TMemo;
  procedure btnFingerClick(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
private
  { Private declarations }
publ
 
2006年11月21日 星期二 下午 2:32
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;

type
TCon = record
FileName : String;
TotalSize : Integer;
Status : Integer;
end;

PCON = ^TCON;

TForm1 = class(TForm)
SS: TServerSocket;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure SSClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure SSClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
SS.Port := 9000;
 
   
 
 
文章存档
 
     
 
最新文章评论
  

路过拜访一下主人,问主人好! “参观一圈”,感觉很好!挑选了两件作品转走,表示感
 

楼主不能下载了啊
 

你好! 请问是出气时感觉气至涌泉,还是吸气时呢?我看这不同的版本说的不一样啊。
 

30岁对一个工程师来讲,似乎永远是个迷茫的开始……不知什么时候能很轻松的对待这个
 

好文章
   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu