台灣最大程式設計社群網站
線上人數
958
 
會員總數:240112
討論主題:186180
歡迎您免費加入會員
討論區列表 >> C/C++ >> 求大神幫幫忙DEBUG
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
求大神幫幫忙DEBUG
價值 : 200 QP  點閱數:243 回應數:1

樓主

agk66952
門外漢
0 1
8 0
發送站內信

最近練習寫一個簡單的 TCP PORT SCAN 的程式
但有很多BUG 已經要瘋了~~~~

我的程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <string.h>


#define BOOL_T unsigned char
#define TRUE 1
#define FAILE 0

#define UINT8_T unsigned char
#define INT8_T char
#define UINT16_T unsigned short
#define INT16_T short
#define UINT32_T unsigned int
#define INT32_T int

#define MAX_PORT 4096

INT32_T g_client_fd = 0;


static INT32_T init(void)
{
g_client_fd = 0;
unlink("host_log");
}

INT32_T main(int argc, char **argv)
{
INT32_T rc = 0;
struct sockaddr_in server_addr;

UINT8_T ip_str[255];
UINT32_T port_no = 0;

init();

if (argc > 1)
{

for (port_no = 0; port_no < MAX_PORT; port_no++)
{
g_client_fd = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);

memset(&server_addr, sizeof(server_addr));
memset(ip_str, 0, sizeof(ip_str));
memset(&interface_a, sizeof(interface_a));

strncpy(ip_str, argv[1], strlen(argv[1]));

ip_str[strlen(argv[1])] = '\0';

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port_no);
server_addr.sin_addr.s_addr = inet_addr(ip_str);

rc = connect(g_client_fd,(struct sockaddr *) &server_addr, sizeof(server_addr));


if (rc == 0)
{
MSG ("\r\n host(%s) port(%d) is opened \r\n", ip_str, port_no);
}

close(g_client_fd);
}
printf("\r\nscan host(%s) port(%d) is compeleted.... \r\n", ip_str);
}

return 0;
}


搜尋相關Tags的文章: [ TCP ] , [ PORT ] , [ SCAN ] ,
本篇文章發表於2017-01-05 23:19
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Raymond
檢舉此回應
1. memset() 需要 3 個參數, 所以這兩行是錯的: (很奇怪, 你有三行 memset(), 唯獨中間那行是對的)


其實有更好的方法, 你可以這麼寫:


2. 第 3 個 memset() 裡的 interface_a 沒有定義. 不過你的程式也沒有用到, 所以這行 可刪.


3. MSG 沒有定義:

它應該是個 #define 或特殊函式.


4. 編譯器找不到 close() 這個函式的宣告:
原因很簡單, 因為你用的是視窗系統的 socket 函式庫 (<winsock2.h>), 它裡面用的是 closesocket().

既然你用的是 <winsock2.h>, 所以你應該參考視窗 socket 函式庫的說明文件: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740506(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737582(v=vs.85).aspx

也就是說, socket 的回傳類型 (也就是 g_client_fd 的類型) 要用SOCKET.



5. ip_str 的類型不應該是 unsigned char. 你應該用 char.



本篇文章回覆於2017-01-11 22:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.