2020年1月8日 星期三

Netcat(Linux nc 指令)網路管理者工具實用範例


Netcat 這個工具在 Linux 系統中的指令名稱是 nc,以下是各種 nc 指令的實用範例。
在一般的 Linux 系統中,從 0 到 1023 這個範圍的連接埠(port)是需要有 root 權限才能使用的,而 1024 以上的連接埠則是可以讓一般的使用者使用,在使用 Netcat 時請注意這個權限問題。
nc 可以用來檢測伺服器特定的連接埠(port)是否有開啟:
nc -v 192.168.0.175 5000
若輸出為:
nc: connect to 192.168.233.208 5000 (tcp) failed: Connection refused
這樣就表示該連接埠沒有開啟。
如果是有開啟的連接埠,會像這樣:
nc -v 192.168.0.175 22
輸出為:
Connection to 192.168.0.175 22 port [tcp/ssh] succeeded!
SSH-2.0-OpenSSH_6.0p1 Debian-4


傳送測試用的 UDP 封包到遠端伺服器

下面這行指令會傳送 UDP 的測試封包到指定的機器與連接埠,-w1 參數是指定 timeout 的時間為 1 秒。
echo -n "foo" | nc -u -w1 192.168.1.8 5000

開啟 UDP 連接埠接收資料

下面這行指令會開啟一個指定的 UDP 連接埠,並將接收到的文字資料直接輸出在終端機中:
nc -lu localhost 5000

遠端機器的連接埠掃描(Port Scanning)

這行指令會掃描指定機器 1 ~ 1000 與 2000 ~ 3000 這兩個範圍的 TCP 連接埠,看看哪些埠號有開啟。
nc -vnz -w 1 192.168.233.208 1-1000 2000-3000
這行則是掃描 UDP 的連接埠:
nc -vnzu 192.168.1.8 1-65535


~ ref from  https://blog.gtwang.org/linux/linux-utility-netcat-examples/

2019年8月13日 星期二

Linker

1. Makefile 中會 指定linker.ld.c 要編成 linker.ld .
 e.g. $(OBJ_DIR)/linker.ld: $(SRC_DIR)/linker.ld.c
       $(CC) -Xpreprocessor $(IFLAGS) -P -E  $< -o $@


2. linker.ld.c中會指定 obj 要放在哪個地方
 e.g. 
  .sram : {   
     obj/wcom*.o(.text); 
     *(.sram);
  } > sram AT> flash

  .text :  {
*(.text);
  } > flash

 這樣表示 , 除非特別指定放在sram , 否則都放在 flash
 從編出來的執行檔 可以看出這個差異 (1.有放在.sram . 2. 拿掉)
 
  $ nm PDK_dbg.elf | grep OOBResponseTask
  8a00008c T OOBResponseTask //in SRAM

  $ nm PDK_dbg.elf | grep OOBResponseTask
  8b03b108 T OOBResponseTask //in FLASH

 

2017年9月27日 星期三

Git tag



New tag                                                                             
a 就是標籤名稱,-m 代表該標籤說明
01
02
03
04
05
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4


Commit Tag                                                                         
git push origin v1.5
or
git push origin --tags

Delete local Tag                                                                  
git tag -d v12345



Git 如何 checkout 某個tag                                                                             

先利用 git clone 抓取整個repository 再利用 git tag -l 列出全部的tag清單 最後用 git checkout from http://miscflame.blogspot.tw/2010/10/git-checkout-tag.html

2017年9月5日 星期二

Visual Studio 2010 如何得知電腦休眠/待機狀態使用


【C++】Visual Studio 2010 如何得知電腦休眠/待機狀態使用 WM_POWERBROADCAST

有兩種方式 首先開啟[MFC類別精靈]                                                                           
第一種新增虛擬函式 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CTestPowerDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
  if (message == WM_POWERBROADCAST)
 {
    if (wParam== PBT_APMSUSPEND)//休眠
      AfxMessageBox(L"System is suspending operation.");
  }
  return CDialogEx::WindowProc(message, wParam, lParam);
}

第二種新增訊息 afx_msg UINT OnPowerBroadcast(UINT nPowerEvent, UINT nEventData);
BEGIN_MESSAGE_MAP(CTestPowerDlg, CDialogEx)
 ON_WM_POWERBROADCAST()
END_MESSAGE_MAP()

UINT CTestPowerDlg::OnPowerBroadcast(UINT nPowerEvent, UINT nEventData)
{
  if (nPowerEvent == PBT_APMSUSPEND)//休眠
    AfxMessageBox(L"System is suspending operation.");
  return CDialogEx::OnPowerBroadcast(nPowerEvent, nEventData);
}
第三種  新增訊息 : ClientTool 是用這個方式

BEGIN_MESSAGE_MAP(CRtkDashClientDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_MESSAGE(WM_POWERBROADCAST, &CRtkDashClientDlg::OnPowerMsg)
END_MESSAGE_MAP()

afx_msg LRESULT CRtkDashClientDlg::OnPowerMsg(WPARAM wParam, LPARAM lParam)
{
#if 1
switch(wParam)
{
case PBT_APMQUERYSUSPEND: //進入suspend
m_AdaptOpened = FALSE;
::AfxMessageBox("PWD to sleep");
break;
case PBT_APMRESUMEAUTOMATIC: //resume回來
while(ChkRtkAdapter() == false)
{
Sleep(1000);
}
break;
}
#endif
return TRUE;

}



from : http://rockpenny.pixnet.net/blog/post/828136-%E3%80%90c%2B%2B%E3%80%91visual-studio-2010-%E5%A6%82%E4%BD%95%E5%BE%97%E7%9F%A5%E9%9B%BB%E8%85%A6%E4%BC%91%E7%9C%A0-%E5%BE%85%E6%A9%9F

2016年4月19日 星期二

Registry

http://biosengineer.blogspot.tw/2007/12/vc-windows-registry.html


1.型態

Registry 的 Value的型態
REG_SZ                  就是  LPCSTR 
REG_MULTI_SZ     就是  
REG_DWORD        就是  DWORD   
REG_BINARY 


2.主鍵 (HKEY)
 就是 HKEY_LOCAL_MACHINE / HKEY_CURRENT_USER .... 

3. 





註冊表的存取方式由微軟文件上說明得知,需要做3種步驟:

1. 得到Handle

       RegOpenKeyEx 或是 RegCreateKey

2. 存取你要的鍵值

    RegSetValueEx() 或是 RegQueryValueEx()


3.關閉Handle

     RegCloseKey()

2016年3月30日 星期三

Call by Reference

https://dotblogs.com.tw/brian/2012/10/18/77588

Call by Reference 和 Call by Address的效果相同 ,  只是寫法不同.


int main() {
    int x = 5;
    foo(x); // 不用加& }
void foo(int &x) {
    x++; // 修改此x就是修改main的x }
csie-tw.blogspot.com

如果寫成call by pointer的方式,麻煩的地方是每次傳address都要加個 & ,而在副程式裡還要加個 * 來指向原本的實體。因此,C++新增了Call by reference的方式,讓在丟變數到副程式時,不用加&,而在副程式參做此變數也不用加*號就可以直接修改其變數。唯一要寫的是:在副程式裡的參數裡加上&,代表是Call by reference。


另外一種寫法

int a = 10, b = 20;
int &x = a;
特別要注意的是,Call by reference的方式,一定要在初始化時就有指向的實體,而且不能改變。

Read more: http://tw.tonytuan.org/2010/03/call-by-valuecall-by-pointercall-