Not getting correct port number by GetExtendedTcpTable in delphi 7 -



Not getting correct port number by GetExtendedTcpTable in delphi 7 -

i have implemented next code getting tcp info function gettcpextendedtable :

const any_size = 1; iphlpapi = 'iphlpapi.dll'; //for using dll tcp_table_owner_pid_all = 5; {states of connections} mib_tcp_state: array[1..12] of string = ('closed', 'listen', 'syn-sent ','syn-received', 'established', 'fin-wait-1', 'fin-wait-2', 'close-wait', 'closing','last-ack', 'time- wait', 'delete tcb'); {record of type mib_tcprow: typedef struct _mib_tcprow { dword dwstate; dword dwlocaladdr; dword dwlocalport; dword dwremoteaddr; dword dwremoteport; }//mib_tcprow, *pmib_tcprow; type {the type of tcp table construction retrieve. parameter can 1 of values tcp_table_class enumeration. } tcp_table_class = integer; pmibtcprowownerpid = ^tmibtcprowownerpid; tmibtcprowownerpid = packed record dwstate : dword; dwlocaladdr : dword; dwlocalport : dword; dwremoteaddr: dword; dwremoteport: dword; dwowningpid : dword; end; {record of type mib_tcptable: typedef struct _mib_tcptable { dword dwnumentries; mib_tcprow table[any_size]; } //mib_tcptable, *pmib_tcptable pmib_tcptable_owner_pid = ^mib_tcptable_owner_pid; mib_tcptable_owner_pid = packed record dwnumentries: dword; table: array [0..any_size - 1] of tmibtcprowownerpid; end; //defintion getextendedtcptable:function (ptcptable: pointer; dwsize: pdword; border: bool; laf: ulong; tableclass: tcp_table_class; reserved: ulong): dword; stdcall; procedure tfmainviewtcp.showcurrenttcpconnections; var error : dword; tablesize : dword; : integer; ipaddress : in_addr; remoteip : string; localip : string; procname:string; fextendedtcptable : pmib_tcptable_owner_pid; begin i:=0; tablesize := 0; error := getextendedtcptable(nil, @tablesize, false,af_inet, tcp_table_owner_pid_all, 0); if error <> error_insufficient_buffer exit; getmem(fextendedtcptable, tablesize); seek if getextendedtcptable(fextendedtcptable, @tablesize, true,af_inet,tcp_table_owner_pid_all, 0) = no_error begin := 0 fextendedtcptable.dwnumentries - 1 begin ipaddress.s_addr := fextendedtcptable.table[i].dwremoteaddr; remoteip := string(inet_ntoa(ipaddress)); ipaddress.s_addr := fextendedtcptable.table[i].dwlocaladdr; localip := string(inet_ntoa(ipaddress)); memo1.lines.add(inttostr(fextendedtcptable.table[i].dwowningpid)); memo1.lines.add(inttostr(lo(fextendedtcptable.table[i].dwlocalport))); end; //for end; //if freemem(fextendedtcptable); end; end;

the problem port numbers displayed '34560' whereas real port number '135' seen through netstat. changes needed see right port number?

i read should display lower 16 bytes of dwlocalport. did lo() function. got answers '0','8' etc. please help.

thanks in advance

the port numbers given in network byte order. network byte order big endian , have reverse order of bytes create sense of it.

the documentation mib_tcprow_owner_pid contains of import point.

the dwlocalport, , dwremoteport members in network byte order. in order utilize dwlocalport or dwremoteport members, ntohs or inet_ntoa functions in windows sockets or similar functions may needed.

simply pass port numbers through ntohs() , create sense again. example:

memo1.lines.add(inttostr(ntohs(fextendedtcptable.table[i].dwlocalport)));

delphi

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -