您的位置:程序门 -> delphi -> 网络通信/分布式开发



关于如何捕获连接本机的远程ip地址


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于如何捕获连接本机的远程ip地址
发表于:2007-02-25 18:49:49 楼主
关于如何捕获连接本机的远程ip地址:
我本机上有socket编写服务端,远程连接上的客户端.(因为原软件的代码已经不在,无法进行改动.)
现我想另外在写个程序,捕获连接本服务端的ip地址,如何实现?
发表于:2007-02-27 09:02:451楼 得分:0
一般情况下这样的连接里面服务器端都是能够获取连接ip的,当然了,你服务器端代码不是也没有吧??
发表于:2007-02-28 03:46:032楼 得分:0
netstat   -n
发表于:2007-02-28 03:47:223楼 得分:0
分析输出结果,可以找出与本机指定端口建立连接的远程ip及端口。
发表于:2007-02-28 03:53:224楼 得分:0
//   最好的方法,   调用   getextendedtcptable()

const   //   const   for   getextendedtcptable
    mib_tcp_state_closed   =   1;
    mib_tcp_state_listen   =   2;
    mib_tcp_state_syn_sent   =   3;
    mib_tcp_state_syn_rcvd   =   4;
    mib_tcp_state_estab   =   5;
    mib_tcp_state_fin_wait1   =   6;
    mib_tcp_state_fin_wait2   =   7;
    mib_tcp_state_close_wait   =   8;
    mib_tcp_state_closing   =   9;
    mib_tcp_state_last_ack   =   10;
    mib_tcp_state_time_wait   =   11;
    mib_tcp_state_delete_tcb   =   12;
    tcp_table_basic_listener   =   0;
    tcp_table_basic_connections   =   1;
    tcp_table_basic_all   =   2;
    tcp_table_owner_pid_listener   =   3;
    tcp_table_owner_pid_connections   =   4;
    tcp_table_owner_pid_all   =   5;
    tcp_table_owner_module_listener   =   6;
    tcp_table_owner_module_connections   =   7;
    tcp_table_owner_module_all   =   8;
    udp_table_basic   =0;
    udp_table_owner_pid   =   1;
    udp_table_owner_module   =   2;
    error_insufficient_buffer   =   122;

    mib_if_oper_status_connecting   =   3;
    mib_if_oper_status_connected   =   4;
    mib_if_oper_status_operational   =   5;

    mib_if_admin_status_up   =   1;
    mib_if_admin_status_down   =   2;
    mib_if_admin_status_testing   =   3;

type   //   type   for   getextendedtcptable
    tmib_tcprow_owner_pid   =   record
        dwstate:   dword;
        dwlocaladdr:   dword;
        dwlocalport:   dword;
        dwremoteaddr:   dword;
        dwremoteport:   dword;
        dwowningpid:   dword;
    end;
    pmib_tcprow_owner_pid   =   ^tmib_tcprow_owner_pid;

    tmib_tcptable_owner_pid   =   record
        dwnumentries:   dword;
        table:   array   [0..999]   of   tmib_tcprow_owner_pid;
    end;
    pmib_tcptable_owner_pid   =   ^tmib_tcptable_owner_pid;


var
    ptcp:   pmib_tcptable_owner_pid;
    dwsize:   dword;
    i:   integer;
begin
        dwsize   :=   0;
        if   getextendedtcptable(ptcp,   @dwsize,   true,   af_inet,
                    tcp_table_owner_pid_connections,   0)   =   error_insufficient_buffer   then
            ptcp   :=   allocmem(dwsize)
        else
            exit;
        pidlist.clear();
        cntlist.clear();
        if   getextendedtcptable(ptcp,   @dwsize,   true,   af_inet,
                    tcp_table_owner_pid_connections,   0)   =   0   then
        begin
            for   i   :=   0   to   ptcp.dwnumentries-1   do
                with   ptcp.table[i]   do   //   table[i]对应一个连接
                    //   此处对连接的属性进行判断
......
发表于:2007-02-28 03:54:455楼 得分:0
不好意思,   上面有两条语句你要删除
pidlist.clear();
cntlist.clear();


快速检索

最新资讯
热门点击