จะบอกได้อย่างไรว่าคอมพิวเตอร์เปิดไฟล์ในเครือข่ายร่วมกันอย่างไร


21

สิ่งแวดล้อม:

Windows XP sp3, เซิร์ฟเวอร์ Windows 2003

ปัญหา:

เรามีตู้คีออสก์หลายโหลแต่ละเครื่องมีชื่อเข้าสู่ระบบเดียวกันซึ่งบางครั้งและสั้น ๆ ไฟล์ในการแบ่งปัน อัตรานี้ล็อคหลายครั้งและเผยแพร่ต่อนาที

เมื่อเร็ว ๆ นี้เราพบว่ามีลูกค้ารายหนึ่งล็อกไฟล์โดยเฉพาะจากนั้นไม่ปล่อยไฟล์ 

เราสามารถปิดไฟล์เมื่อสิ่งนี้เกิดขึ้น แต่ผ่านไปหลายนาทีหรือนานกว่านั้นและนี่คือการหยุดทำงานที่ไม่สามารถยอมรับได้

ปัญหาการล็อคที่ยังไม่ได้เผยแพร่เกิดขึ้นหลายครั้งในเดือนที่แล้ว ฉันกำลังมองหาอุปกรณ์คีออสก์ที่รับผิดชอบในการล็อคและตรวจสอบได้อย่างรวดเร็วเมื่อมันเกิดขึ้น

ดูเหมือนจะมีช่องว่างในข้อมูลที่เราได้รับจากเซิร์ฟเวอร์:

เราสามารถดูได้จากเครื่องมือต่าง ๆ :
- ไฟล์อะไรที่เปิดและล็อคอยู่ (หลายวิธี) การ
เข้าสู่ระบบอะไรมีไฟล์ specifc เปิดหรือล็อค (หลายวิธี)
- คอมพิวเตอร์บางเครื่องโดยทั่วไปมีไฟล์เปิดอยู่ (โฟลเดอร์ที่แชร์เซสชัน mmc)

สิ่งที่เรามองไม่เห็นคือคอมพิวเตอร์เครื่องหนึ่งมีไฟล์เฉพาะที่เปิดและล็อคอยู่

ใครรู้วิธีที่จะได้รับสิ่งนี้หรือไม่?

ขอบคุณ -

ปล้น


1
ไม่ใช่สิ่งที่คุณขอ แต่วิธีการทางเลือกคือการสร้างบัญชีแยกต่างหากสำหรับแต่ละระบบ
ไบรอัน

คำตอบ:


10

ลองใช้ฟรีแวร์ตัวนี้ ( ShareWatch ) ฉันคิดว่ามันจะทำในสิ่งที่คุณต้องการ

หนึ่งในคุณสมบัติที่ระบุไว้: "แสดงผู้ใช้และคอมพิวเตอร์ที่เชื่อมต่อกับแต่ละการแชร์พร้อมกับไฟล์ที่เปิดอยู่"

ข้อความแสดงแทน


1
ขอบคุณสำหรับสิ่งนี้ - ฉันได้ลอง Sharewatch แล้ว ในสถานการณ์ของฉัน - มากกว่าหนึ่งโหลลูกค้าที่มีชื่อเข้าสู่ระบบเดียวกัน - มันรวมไฟล์ที่เปิดและเวิร์กสเตชันลงในรายการเดียวกัน คุณไม่สามารถบอกได้ว่าเวิร์กสเตชันนั้นเปิดอยู่ นอกจากนี้การเลือกคุณสมบัติจะรายงานเพียงว่าเวิร์กสเตชันมีไฟล์ x เปิดอยู่ไม่ใช่ชื่อไฟล์ การเลือกคุณสมบัติสำหรับไฟล์ให้ข้อมูลที่คล้ายกัน
RobW

7

ป้อนบรรทัดคำสั่ง (CMD)

จากนั้นพิมพ์: openfiles / query ip ของ networkshare

และอาจต้องมีชื่อผู้ใช้และรหัสผ่าน

คุณจะได้รับข้อมูลเพิ่มเติมของ openfiles ในที่นี่


ขอบคุณ Openfiles ให้ผลลัพธ์ส่วนใหญ่เหมือนกับเซสชันของสุทธิจากคอนโซลของเซิร์ฟเวอร์ ไม่ให้ชื่อคอมพิวเตอร์ที่เปิดไฟล์ ฉันกำลังมองหาการเชื่อมต่อไฟล์ -> คอมพิวเตอร์ไม่ใช่การเชื่อมต่อไฟล์ ->
RobW

5

ฉันเชื่อว่าคุณจะต้องการอ้างอิงกลับไปที่โพสต์ของ Sky100 เนื่องจากเขาถูกต้องไม่ใช่ในการให้สิ่งที่คุณถาม แต่ในการให้สิ่งที่คุณต้องการเพื่อแก้ไขปัญหาของคุณ คุณจะต้องอ้างอิงหมายเลข ID ที่ถูกล็อคผ่านคำสั่ง "openfile / query / v" (verbose) เนื่องจากจะให้ข้อมูลที่คุณต้องการ ค้นหาชื่อไฟล์ภายในรายการที่กำหนดข้อมูลจะแสดงว่ารายการใดมีการเปิดใช้งานการอ่านและเขียนและจะให้หมายเลข ID เฉพาะ ไม่คุณอาจไม่สามารถค้นหาว่าระบบใดมีไฟล์ที่ถูกล็อค แต่ด้วยเครื่องมือที่มีให้คุณสามารถยกเลิกการเชื่อมต่อผู้ใช้นั้นจากไฟล์ นี่คือทีละขั้นตอนเพื่อลดความซับซ้อน ramblings ของฉัน

1) บนไฟล์เซิร์ฟเวอร์ที่มีสิทธิ์ผู้ดูแลระบบให้ทำเริ่ม> เรียกใช้> CMD [ENTER]

2) ซีดีเดสก์ท็อป [ENTER] (คุณจะเห็นว่าทำไมในไม่ช้า)

3) openfiles / query / v> file.txt [ENTER] (สิ่งนี้จะสร้างไฟล์บนเดสก์ท็อปที่มีรายการไฟล์ที่เปิดทั้งหมดบนเซิร์ฟเวอร์)

4) เปิดไฟล์ file.txt และค้นหาบรรทัดที่มีทั้งชื่อไฟล์และสิทธิ์อ่าน + เขียน

5) จดบันทึกหมายเลข ID ในบรรทัดนั้นและกลับไปที่คอนโซลคำสั่งของคุณ

6) openfiles / disconnect / ID [ใส่หมายเลข ID ที่นี่] [ENTER]

ตราบใดที่คุณมีสิทธิ์ระดับผู้ดูแลระบบในไฟล์เซิร์ฟเวอร์มันจะตัดการเชื่อมต่อระบบนั้นออกจากไฟล์และสมมติว่าระบบของคุณเป็นแบบอัตโนมัติ

การอ้างอิง: openfiles / query /? openfiles / ยกเลิกการเชื่อมต่อ /?

หากคุณต้องการสคริปต์หรือแอปพลิเคชันที่ตั้งโปรแกรมไว้ในระบบของคุณโปรดแสดงความคิดเห็นและฉันจะให้ข้อมูลการติดต่อในราคาที่ต่ำมากพร้อมกับเทคโนโลยี สนับสนุนแอปพลิเคชันของฉัน


ฮา! ปัญหาของฉันคือค้นหาคอมพิวเตอร์ที่เปิดไฟล์ คุณมีความคิดเกี่ยวกับวิธีการทำเช่นนั้น? การระบุและปิดไฟล์นั้นเป็นเรื่องง่ายและมีหลายวิธีในการสร้างผลลัพธ์นี้ ฉันขอขอบคุณคำตอบและข้อเสนอเชิงพาณิชย์ของคุณทำให้ฉันหัวเราะตอนเช้า ;-)
RobW

คำขอโทษของฉันฉันไม่ทราบว่ากระบวนการ openfiles ไม่ใช่วิธีแก้ปัญหา จากสิ่งที่คุณอธิบายดูเหมือนว่าจะสามารถแก้ไขความต้องการของคุณในการดูระบบเพิ่มเติมเนื่องจากไม่ได้ปิดไฟล์ แต่เพียงแค่ลบการตั้งค่าที่ล็อค ในความเป็นจริงฉันสร้างแอปพลิเคชันสำหรับ บริษัท ของฉันและสามารถทำงานอัตโนมัติทุก ๆ เล็กน้อยเพื่อหลีกเลี่ยงภาวะแทรกซ้อนดังกล่าว ฉันเดาว่านั่นเป็นประเด็น ในการตอบคำถามโดยตรงของคุณ: ใช่ควรมีวิธีการตรวจสอบระบบเหล่านั้นสำหรับการเข้าถึงไฟล์นั้น โปรดดูโพสต์ถัดไปของฉันสำหรับรายละเอียดเพิ่มเติม
โทมัส

อันที่จริงแล้วการกลับไปอ่านโพสต์ของคุณอีกครั้ง ... "เราสามารถปิดไฟล์เมื่อเกิดเหตุการณ์นี้ แต่ผ่านไปหลายนาทีหรือนานกว่านั้นและนี่เป็นปัญหาที่ไม่สามารถยอมรับได้" สาเหตุที่โซลูชันของคุณไม่ทำงานเนื่องจากคุณกำลังปิดไฟล์ โซลูชันของ Sky100 ของฉันและบางส่วนที่ให้ไว้ก่อนหน้านี้ไม่ได้ปิดไฟล์ แต่เปลี่ยนสิทธิ์การเข้าถึงเป็นอ่านอย่างเดียว ฉันสับสนอีกครั้งว่า openfiles ไม่ใช่วิธีการแก้ปัญหาที่คุณต้องการ ให้มันยิงก่อนที่จะเขียนมันออกมาเป็นวิธีการแก้ปัญหาที่ไม่ใช่ หากคุณไม่สนใจโปรแกรมเมอร์ให้สร้างไฟล์แบตช์เพื่อเรียกใช้ทุกสองสามนาที
โทมัส

ฉันปล่อยให้คำถามของคุณด้านล่างเพื่อไม่ให้เสียเวลาในกรณีที่ความเข้าใจของฉันเกี่ยวกับสถานการณ์ไม่ทั่วถึง
โทมัส

mmmm ขอโทษ แต่ฉันไม่รู้สึกว่าคำถามของฉันถูกตอบโดยคุณ ฉันต้องการความช่วยเหลือในการพิจารณาว่าคอมพิวเตอร์เปิดไฟล์ใดอยู่ ฉันสนใจกำหนดชื่อคอมพิวเตอร์จริงๆ ที่เหลือทั้งหมดในขณะที่น่าสนใจไม่ได้บอกสิ่งที่แน่นอนที่ฉันตามมา
RobW

2

ปัญหาที่คุณพยายามจะแก้ไขคือสิ่งที่คุณระบุ (เช่นแผนที่คอมพิวเตอร์ไคลเอนต์เฉพาะ (ไม่ใช่ผู้ใช้) ไปยังไฟล์ที่ถูกล็อค) หรือว่ามีปัญหาการล็อคที่คุณต้องแก้ไขหรือไม่?

หากหลังจะช่วยแล้วมีสองสิ่งที่ฉันจะดู:

  • ตรวจสอบ AV ที่ติดตั้งบนไคลเอนต์ของคุณ - ฉันเห็นหลายฝั่งไคลเอ็นต์ AV ทำให้เกิดพฤติกรรมการล็อคที่ผิดปกติที่น่ารังเกียจอย่างจริงจังกับการแชร์

  • ลองปิดการใช้งานโอกาสในการล็อคโดยการตั้งค่า EnableOpLocks ค่ารีจิสทรีเป็น 0

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameter EnableOplocks REG_DWORD 0 หรือ 1 ค่าเริ่มต้น: 1 (เปิดใช้งาน)

สิ่งนี้จะลดประสิทธิภาพลงบ้าง แต่ไม่ควรทำลายอะไรเลย

ฉันชอบที่จะเห็นใครบางคนตอบคำถามที่คุณระบุไว้จริง ๆ - เป็นปัญหาที่น่าสนใจ


ขอบคุณ Helvick! การปิดใช้งานการล็อกแบบฉวยโอกาสเป็นวิธีที่น่าสนใจ เซิร์ฟเวอร์ฉันถือว่า
RobW

ใช่อยู่บนเซิร์ฟเวอร์ - สิ่งนี้จะป้องกันไม่ให้ไคลเอนต์ร้องขอการล็อกแบบฉวยโอกาสเพื่อให้พวกเขาสามารถแคชไฟล์ (บางส่วน) ในเครื่อง
Helvick

ประสิทธิภาพที่ได้รับจากการปิดการใช้งานการล็อกแบบฉวยโอกาสจะเป็นที่ยอมรับไม่ได้สำหรับเรา เราจะต้องดูเรื่องนี้ใน testbed ของเรา
RobW

นั่นเป็นความเสี่ยงอย่างแน่นอน - ฉันสนใจในสิ่งที่คุณค้นหา
Helvick

2

ในความพยายามแก้ไขปัญหา RobW และให้ทางเลือกอื่นฉันไม่สามารถตอบคำถามของเขาได้

ฉันเชื่อว่าโซลูชันที่คุณกำลังมองหาจะอยู่ในการตั้งค่านโยบายการตรวจสอบในระบบนั้นแล้วตั้งค่าไฟล์นั้นเพื่อตรวจสอบการเข้าถึงใด ๆ จากผู้ใช้รายนั้น ขั้นตอนในการดำเนินการนี้อาจแตกต่างกันไปขึ้นอยู่กับการตั้งค่าเครือข่ายของคุณดังนั้นฉันจะแนะนำคุณไปยังลิงค์เทคนิคของไมโครซอฟท์เกี่ยวกับวิธีการตั้งค่าระบบที่แตกต่างเพื่อตรวจสอบ

http://technet.microsoft.com/en-us/library/cc787268(WS.10).aspx

หลังจากตั้งค่าแล้วตรวจสอบให้แน่ใจว่าได้ติดตามด้วยการตั้งค่าไฟล์เฉพาะที่คุณต้องการตรวจสอบโดยการแนบบัญชีผู้ใช้เป็นผู้สอบบัญชีคุณควรพร้อมที่จะไป

เพียงตรวจสอบบันทึกเหตุการณ์การรักษาความปลอดภัยของคุณในอนาคตและแม้ว่ามันจะแสดงรายการแต่ละระบบ (เนื่องจากพวกเขาทั้งหมดใช้ชื่อผู้ใช้เดียวกัน) จึงไม่ยากที่จะเรียงลำดับและค้นหาว่าระบบใดที่มีการเข้าถึงแบบอ่านและเขียนในปัจจุบัน

อาจเป็นประโยชน์ในการตั้งค่าบันทึกความปลอดภัยเพื่อล้างทุกสองสามวัน

หากวิธีนี้ใช้ไม่ได้อาจเป็นไปได้ว่าคุณจะต้องตั้งค่าระบบสำหรับแต่ละชื่อโฮสต์ที่เข้าถึงไฟล์มากกว่าชื่อผู้ใช้ ฉันเชื่อว่าสิ่งนี้เกิดขึ้นได้ผ่านทาง Microsoft Management Console

อีกครั้งถ้าคุณต้องการเขียนโปรแกรมฉันไม่ใช่นักธุรกิจที่สนใจที่จะรับเงินจำนวนมากสำหรับโปรแกรมเล็ก ๆ ฉันให้การเขียนโปรแกรมที่มีคุณภาพในราคาที่แม้แต่ตัวบุคคลก็ไม่ต้องอาย ฉันหวังว่านี่จะช่วยคุณในการแก้ไขปัญหาของคุณ


ขอบคุณสำหรับสิ่งนี้. ฉันตั้งค่าการตรวจสอบในไดเรกทอรีนั้นหลังจากปัญหาเริ่มต้น เรามีลูกค้าประมาณ 150 คน (และไม่ใช่แค่ตู้) ที่ใช้งานในไดเรกทอรีนั้น เนื่องจากปัญหาเป็นระยะ ๆ อัตราส่วนสัญญาณต่อสัญญาณรบกวนมีขนาดใหญ่มากและฉันไม่เห็นวิธีที่ชัดเจนในการเชื่อมโยงคอมพิวเตอร์เฉพาะกับเหตุการณ์ไฟล์ ฉันจะดูอีกครั้ง เรามีการประชุมการออกแบบสองสามครั้งแล้ว มีหลายหัวข้อที่อยู่ในตารางรวมถึงบัญชีเข้าสู่ระบบ ฉันยังคงต้องการที่จะรู้ว่าคอมพิวเตอร์มีการถือครองไฟล์เปิด :-)
RobW

1

ฉันจะกำหนดผู้ใช้ที่แตกต่างกันให้กับซุ้มที่แตกต่างกันถ้าเป็นไปได้ - มันอาจช่วยคุณในการวิเคราะห์บันทึกอื่น ๆ ...

หากไม่สามารถทำได้: โครงร่างของวิธีแก้ปัญหาที่เป็นไปได้: วิธีแก้ไขอาจใช้เครื่องมือเช่น sysinternals processmonitor พร้อมตัวกรองที่เหมาะสม (ไปยังไฟล์ที่เป็นปัญหา) บนซุ้ม มีตัวเลือกบรรทัดคำสั่งบางตัวที่คุณสามารถเล่นพร้อมกับบันทึกข้อมูลที่บันทึกไว้ในไฟล์

รวบรวมสิ่งเหล่านี้จากซุ้มต่าง ๆ นำเข้ามาไว้ใน Excel และมองหาสิ่งที่ไม่ได้ปิด ...


0

สิ่งที่เกี่ยวกับการใช้คำสั่ง netstat เพื่อตรวจสอบสิ่งนี้

netstat -an | find ":445"

สิ่งนี้จะให้ที่อยู่ IP ของเครื่องที่เชื่อมต่อ

หากคุณต้องการชื่อโฮสต์มากกว่าที่อยู่ IP ให้ใช้

netstat -a | find "microsoft-ds"

อย่างไรก็ตามการดำเนินการนี้จะใช้เวลานานกว่าโดยเฉพาะในไฟล์เซิร์ฟเวอร์ที่ไม่ว่างหรือตัวควบคุมโดเมนเนื่องจากจะมีการค้นหาโฮสต์จำนวนมากเพื่อดำเนินการ

นอกจากนี้โปรดทราบว่าผลลัพธ์จะแสดงพอร์ตการรับฟังขาเข้าขาออกและไม่ได้ใช้งาน

การเชื่อมต่อขาเข้าจะแสดง: 445 ในคอลัมน์ด้านซ้ายขาออกแสดงในคอลัมน์ด้านขวา

คุณสามารถละเว้นผลลัพธ์ใด ๆ ที่ระบุว่า 'การรับฟัง' และบรรทัดใด ๆ ที่แสดงเฉพาะที่อยู่ IP ภายในเครื่อง (เช่น 0.0.0.0 หรือ 127.0.0.1) หรือคอมพิวเตอร์เป็นเจ้าของชื่อโฮสต์หากคุณไม่ใช้ตัวเลือก -n

ตัวอย่างเช่น:

Z:\>netstat -an | find ":445"
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    127.0.0.1:445          127.0.0.1:41764        ESTABLISHED
  TCP    127.0.0.1:445          127.0.0.1:41767        ESTABLISHED
  TCP    127.0.0.1:41764        127.0.0.1:445          ESTABLISHED
  TCP    127.0.0.1:41767        127.0.0.1:445          ESTABLISHED
  TCP    192.168.16.17:445      192.168.16.87:1098     ESTABLISHED
  TCP    192.168.16.17:18055    192.168.16.24:445      ESTABLISHED
  TCP    192.168.16.17:20678    192.168.16.24:445      ESTABLISHED
  UDP    0.0.0.0:445            *:*

โฮสต์ที่เชื่อมต่อเท่านั้นที่นี่คือ 192.168.16.87 การเชื่อมต่อไปยัง 192.168.16.24 ขาออก การเชื่อมต่ออื่น ๆ ทั้งหมดเป็นการเชื่อมต่อท้องถิ่น


อืมอ่านคำถามของคุณอีกครั้งและมันก็ไม่ได้แก้ปัญหาของคุณเพราะมันไม่ได้บอกคุณว่าไฟล์ที่คอมพิวเตอร์เปิดอยู่
ไบรอัน

ไม่มีปัญหา. ฉันขอขอบคุณความคิด
RobW

0

ฉันจำได้ว่ามีเครื่องมือกราฟิกใน windows เพื่อตรวจสอบการใช้งานร่วมกันและไฟล์ที่ถูกล็อค

ควรอยู่ใน "เครื่องมือระบบ" ภายใต้ "การจัดการคอมพิวเตอร์" (~ แปลจากภาษาฝรั่งเศส ... ) ภายใต้ชื่อ "โฟลเดอร์ที่ใช้ร่วมกัน"


0

ฉันรู้ว่านี่เก่ามาก แต่ ADSI ให้บริการ WinNT: // ส่วนติดต่อซึ่งช่วยให้คุณเข้าถึงบริการ LANMANSERVER และสอบถามคุณสมบัติที่เปิดเผยใน mmc snapin "Shared Folders" แล้ว ฉันกำลังค้นคว้าวิธีเชื่อมโยงโฮสต์และผู้ใช้กับไฟล์ที่เปิดอยู่


-1

หากเป็นฉันและฉันสามารถเข้าถึงเครื่อง linux บนซับเน็ตเดียวกัน ... ฉันจะทำ tcpdump บนพอร์ตที่ใช้ร่วมกันเพื่อถามถึงกล่องที่พวกเขาถือไฟล์เปิดอยู่

หากคุณไม่มียูนิกซ์คุณยังสามารถใช้ tcpdump แต่คุณต้องติดตั้ง

จาก linux ... ฉันจะทำสิ่งนี้: tcpdump -ieth0 -s0 -X hostname port 1234 | grep -i "nameoffile"

ฉันรู้ว่าน้ำหนักบรรทุกส่วนใหญ่เป็นแบบไบนารี่ ...

สิ่งนี้จะแสดงให้คุณเห็นทุก ๆ โฮสต์ที่เชื่อมต่อกับกล่องนั้นและตำแหน่งของไฟล์ที่พบในข้อมูลแพ็คเก็ตของพวกเขา (ถ้าไม่เข้ารหัสหรือเป็นไบนารี่)

โชคดี! แต่จากประสบการณ์ของฉันควรใช้สิ่งต่อไปนี้:

1) ไฟล์ที่แชร์เป็นความคิดที่ไม่ดี! โดยเฉพาะอย่างยิ่งระบบ w / ระยะไกลที่สามารถปล่อยให้ไฟล์ถูกล็อคหากพวกเขาวางการเชื่อมต่อหรือมีการเชื่อมต่อช้า

2) การเข้าถึงไฟล์ที่แชร์จะทำให้เกิดสภาพการแย่งชิงระหว่างลูกค้า เสียเวลาเห็บอันมีค่า

3) หากคุณต้องใช้ไฟล์ที่ใช้ร่วมกัน ... สร้างชื่อผู้ใช้ที่แตกต่างกันสำหรับแต่ละไซต์ระยะไกลเพื่อให้คุณสามารถดีบักได้อย่างถูกต้อง

สถานการณ์ที่ดีที่สุด ... กำจัดไฟล์และรวมเข้าไปใน SQL หรือสร้างเว็บเซอร์ที่อนุญาตให้ไคลเอนต์เข้าถึงไฟล์หรือข้อมูล

++ ทอดด์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.