Private Sub Timer_Timer(Index As Integer) Dim Tmp$ Select Case WinSock(Index).State Case sckClosed Tmp$ = "关闭" Case sckOpen Tmp$ = "打开" Case sckListening Tmp$ = "侦听" Case sckConnectionPending Tmp$ = "连接挂起" Case sckResolvingHost Tmp$ = "识别主机" Case sckHostResolved Tmp$ = "已识别主机" Case sckConnecting Tmp$ = "正在连接" Case sckConnected Tmp$ = "正在通信中..........." Case sckClosing '------------------------- Tmp$ = "对方主动关闭连接" Case sckError Tmp$ = "测试网关(ISMG)未知错误,请稍后再试........" End Select 'If Trim(Text1.Text) <> Tmp$ Then AddMsg Tmp$
用自己的dll连原来的dll。
这样,你就可以监控发往wsock的所有数据(必要时可以改)——包括每个端口的通讯情况——这叫“外衣法”当然,还可以用“钩子法”,等等也可以用,wsock的某些函数,不过功能没“外衣法”多
你的程序很好用地!我会给你分地。就等下面这位兄弟了这是谁给我的信箱发的源码啊??请说出你的电子信箱,我好给分。>源码下载:
>http://go.163.com/nethief1t2/NetSample.zip>一定要记得给我分呀!
{
// TODO: Add your control notification handler code here
char *state[13]={{"KNOW"},{"CLOSED"},{"LISTEN"},{"SYN_SENT"},{"SYN_RCVD"},
{"ESTAB"},{"FIN_WAIT1"},{"FIN_WAIT2"},{"CLOSE_WAIT"},{"CLOSING"},
{"LAST_ACK"},{"TIME_WAIT"},{"DELETE_TCB"}};
CString str,strTemp;
IN_ADDR localAddr;
IN_ADDR remoteAddr;
WORD dwLocalPort,dwRemotePort;
PMIB_TCPTABLE pTcpTable;
PMIB_UDPTABLE pUdpTable;
HMODULE hModule;
DWORD dwSize;
int i;
dwSize=0;
typedef DWORD (CALLBACK* GETTCPTABLE)(PMIB_TCPTABLE,PDWORD,BOOL);
typedef DWORD (CALLBACK* GETUDPTABLE)(PMIB_UDPTABLE,PDWORD,BOOL);
GETTCPTABLE GetTcpTable;
GETUDPTABLE GetUdpTable;
hModule=LoadLibrary("IPhlpapi.DLL");
if(hModule!=0){
GetTcpTable=(GETTCPTABLE)GetProcAddress(hModule,"GetTcpTable");
if(GetTcpTable!=NULL){
(*GetTcpTable)(NULL,&dwSize,FALSE);
if((pTcpTable=(PMIB_TCPTABLE)GlobalAlloc(GPTR,dwSize))==NULL)
{
AfxMessageBox("内存分配错误\n");
return;
}
if((*GetTcpTable)(pTcpTable,&dwSize,TRUE)!=NO_ERROR)
{
AfxMessageBox("Get error");
return;
}
MIB_TCPROW tab;
for(i=0;i<pTcpTable->dwNumEntries;i++){
tab=pTcpTable->table [i];
localAddr.s_addr =tab.dwLocalAddr ;
remoteAddr.s_addr =tab.dwRemoteAddr ;
dwLocalPort=tab.dwLocalPort ;
dwLocalPort=ntohs(dwLocalPort);
dwRemotePort=tab.dwRemotePort ;
dwRemotePort=ntohs(dwRemotePort);
if(tab.dwRemoteAddr ==0)dwRemotePort=0;
strTemp.Format ("TCP:%s:%d---",
inet_ntoa(localAddr),dwLocalPort);
str+=strTemp;
strTemp.Format ("%s:%d %s\n",
inet_ntoa(remoteAddr),dwRemotePort,
state[tab.dwState]);
str+=strTemp;
}
}
dwSize=0;
GetUdpTable=(GETUDPTABLE)GetProcAddress(hModule,"GetUdpTable");
if(GetUdpTable!=NULL){
(*GetUdpTable)(NULL,&dwSize,0);
if((pUdpTable=(PMIB_UDPTABLE)GlobalAlloc(GPTR,dwSize))==NULL)
{
AfxMessageBox("内存分配错误\n");
return;
}
if((*GetUdpTable)(pUdpTable,&dwSize,TRUE)!=NO_ERROR){
AfxMessageBox("Get UdpTable error");
return;
}
MIB_UDPROW utab;
for(i=0;i<pUdpTable->dwNumEntries;i++){
utab=pUdpTable->table [i];
dwLocalPort=utab.dwLocalPort ;
dwLocalPort=ntohs(dwLocalPort);
localAddr.s_addr=utab.dwLocalAddr ;
strTemp.Format ("UDP: %s:%d\r\n",
inet_ntoa(localAddr),dwLocalPort);
str+=strTemp;
}
}
FreeLibrary(hModule);
}
strTemp=m_Rich.GetText ();
if(str!=strTemp)
m_Rich.SetText (str);
GlobalFree(pTcpTable);
GlobalFree(pUdpTable);}
MICROSOFT WHITE PAGER 上有!
用java写的public class portscan {
public static void main(String[] arg) {
portscan scan = new portscan();
scan.go(arg[0]);
}
public void go(String url) {
Socket socket;
for(int x = 0; x < 1024; x++) {
try {
socket = new Socket(url,x);
System.out.println("port "+x+" ok");
socket = null;
}
catch(Exception e) {
System.out.print("port "+x+"\r");
}
}
}
}
你的IN_ADDR remoteAddr;
PMIB_TCPTABLE pTcpTable;;
MIB_TCPROW tab
结构从什么地方来的MSDN上没有呀
Dim Tmp$
Select Case WinSock(Index).State
Case sckClosed
Tmp$ = "关闭"
Case sckOpen
Tmp$ = "打开"
Case sckListening
Tmp$ = "侦听"
Case sckConnectionPending
Tmp$ = "连接挂起"
Case sckResolvingHost
Tmp$ = "识别主机"
Case sckHostResolved
Tmp$ = "已识别主机"
Case sckConnecting
Tmp$ = "正在连接"
Case sckConnected
Tmp$ = "正在通信中..........."
Case sckClosing
'-------------------------
Tmp$ = "对方主动关闭连接"
Case sckError
Tmp$ = "测试网关(ISMG)未知错误,请稍后再试........"
End Select
'If Trim(Text1.Text) <> Tmp$ Then AddMsg Tmp$
End Sub